2014-04-25 17 views
5

Tôi không thể tìm ra lý do ngoại lệ NullPointer trong dự án Spring của mình. Đôi khi dự án hoạt động tốt nhưng một số thời gian ném con trỏ null của nó Ngoại lệ ở đây là stacktrace đầy đủ.Ngoại lệ con trỏ rỗng trong khi chạy Spring project

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NullPointerException 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

root cause 

javax.servlet.ServletException: java.lang.NullPointerException 
org.apache.jsp.redirect_jsp._jspService(index_jsp.java:72) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

root cause 

java.lang.NullPointerException 
org.apache.catalina.session.ManagerBase.generateSessionId(ManagerBase.java:807) 
org.apache.catalina.session.ManagerBase.createSession(ManagerBase.java:653) 
org.apache.catalina.connector.Request.doGetSession(Request.java:2892) 
org.apache.catalina.connector.Request.getSession(Request.java:2315) 
org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:898) 
org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:910) 
javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238) 
javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238) 
org.apache.jasper.runtime.PageContextImpl._initialize(PageContextImpl.java:146) 
org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:125) 
org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:112) 
org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:65) 
org.apache.jsp.redirect_jsp._jspService(redirect_jsp.java:53) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

Tôi cũng gặp phải lỗi không gian rất thường xuyên. nó có liên quan đến điều này không? tôi đã thay đổi dự án và tomcat VM lựa chọn của tôi (Sử dụng NetBean IDE) tới:

-XX:MaxPermSize=512m 

Tôi đang sử dụng Netbeans IDE 7.3.1, Apache Tomcat 7.0.37, Spring 3.1.1, Hibernate 3.

Nó hiển thị DelegatingFilterProxy trong ngoại lệ. Có thể là do cài đặt bảo mật.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<!-- This is where we configure Spring-Security --> 
<security:http auto-config="true" use-expressions="true" access-denied-page="/auth/denied" > 
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/> 
    <security:intercept-url pattern="/auth/**" access="hasRole('ROLE_USER')"/> 
    <security:form-login 
     login-page="/index" 
     authentication-failure-url="/index" 
     default-target-url="/welcome" 
     /> 
    <security:logout 
     invalidate-session="true" 
     logout-success-url="/index" /> 
</security:http> 


<!-- A custom service where Spring will retrieve users and their corresponding access levels --> 
<bean id="loginService" class="com.tcs.ignite.ih.spring.service.LoginService"/> 

<!--A service where spring will redirect to proper view after successfull login--> 
<!--<bean id="loginSuccessHandler" class="com.tcs.ignite.ih.spring.controller.LoginSuccessHandler" />--> 

<!-- Declare an authentication-manager to use a custom userDetailsService --> 
<security:authentication-manager> 
    <security:authentication-provider user-service-ref="loginService"> 
    </security:authentication-provider> 
</security:authentication-manager> 

</beans> 

UPDATE:

Khi tôi đang cố gắng để truy cập vào tập tin index, chào mừng tập tin để áp dụng quy định tại web.xml, với sau URL

localhost:8080/xxxx/index 

tôi nhận được sau trên trình duyệt:

HTTP Status 500 - Could not get RequestDispatcher for [/WEB-INF/jsp/index.jsp]: Check that the corresponding file exists within your web application archive! 

index.jsp trong hiện tại i n thư mục của tôi. Tôi có cần phải xác định ánh xạ trong thẻ url chặn bảo mật mùa xuân cho/index không?

+0

Rất khó để trả lời những người khác mà không có thông tin rõ ràng về vấn đề của bạn. Bạn có thể giải thích thêm về vấn đề của mình giống như nơi bạn gặp phải lỗi này không? khi triển khai tập tin chiến tranh vào jboss? tất cả các cấu hình sử dụng như phiên bản jboss, phiên bản nhật thực. – Ami

+0

Bạn có redirect.jsp trong nội dung web của mình không ?? – AdityaKeyal

+0

@AdityaKeyal: yes – Dramorian

Trả lời

1

Ngoại lệ thực sự xuất hiện khi trang chuyển hướng yêu cầu phiên và ngữ cảnh thiết lập ngữ cảnh trang (PageContextImpl.java:146) cố gắng tạo phiên. Tuy nhiên, máy phát điện phiên id là bằng cách nào đó vô thời gian này

ManagerBase.java:807..... 

    protected String generateSessionId() { 

      String result = null; 

      do { 
       if (result != null) {     
        duplicates++; 
       } 

       result = sessionIdGenerator.generateSessionId(); 
//There is issue in the above line - sessionIdGenerator is null this time 

      } while (sessions.containsKey(result)); 

      return result; 
     } 

Issue như thế này mà xảy ra liên tục đã được báo cáo here và có rất nhiều bình luận về vấn đề này. Xem có gợi ý nào có thể giúp bạn.

+0

bạn có thể vui lòng xem xét cấu hình bảo mật mùa xuân, tôi nghĩ ngoại lệ này là do bảo mật mùa xuân. – Dramorian

+0

Cấu hình của bạn có vẻ ổn. Redirect.jsp được gọi như thế nào? Tôi đã sử dụng bảo mật Spring với Tomcat 7 trong một thời gian dài và không thể nhớ lại có vấn đề như vậy? – Shailendra

+0

Không phải redirect.jsp của nó là index.jsp. Tệp chào mừng của nó cho dự án (web.xml). Tôi đã cập nhật stacktrace. – Dramorian

2

Nguyên nhân gốc rễ của sự cố của bạn là một phiên làm việc nullIIGenerator trong tomcat ManagerBase.

Xem nhanh code: chỉ có thể Người quản lý chưa bắt đầu hoặc nếu nó đã bị dừng. Tôi đoán ở đây là mã của bạn đang sử dụng trình quản lý "đã bị ngừng".

Sửa lỗi nếu tôi sai, nhưng tôi đoán rằng bạn chỉ gặp sự cố sau khi hủy triển khai/triển khai ứng dụng của bạn (không khởi động lại hoàn toàn tomcat).

Từ nơi phiên bản ManagerBase không hợp lệ này đến từ đâu?

Vâng, không dễ nói, nhưng tôi đoán rằng nó đến từ biến ThreadLocal không được dọn dẹp đúng cách khi ứng dụng của bạn không được triển khai. Vì vậy, bạn có thể kiểm tra mã của riêng mình để xem bạn có đang không sử dụng sai biến ThreadLocal hay không (luôn dọn sạch tất cả các biến ThreadLocal của bạn trong một khối finally trong bộ lọc yêu cầu).

Nếu bạn không tìm thấy bất cứ điều gì trong mã của riêng bạn:

Kiểm tra cẩn thận tất cả các bản ghi (và đặc biệt là cảnh báo) xảy ra khi bạn undeploy/triển khai ứng dụng web của bạn, họ có cơ hội tốt mà bạn sẽ tìm thấy một cái gì đó như "tài nguyên X không thể được phát hành".

Về lỗi OutOfMemory lặp lại của bạn: nó có thể được liên kết với sự cố này. Thật vậy, nếu một số biến ThreadLocal không được dọn sạch một cách chính xác khi ứng dụng không được triển khai/triển khai nó là một rò rỉ bộ nhớ và do đó, ở cuối nó có thể gây ra một OutOfMemory.

Tôi hy vọng điều đó sẽ hữu ích. (Đăng nhật ký khi ứng dụng không được triển khai/triển khai có thể thú vị.)

-1

Bạn đã định cấu hình trình giải quyết chế độ xem trong ngữ cảnh ứng dụng cho jsp chưa? như bên dưới

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
      <property name="prefix" value="/pages/" /> 
      <property name="suffix" value=".jsp" /> 
      <property name="exposeContextBeansAsAttributes" value="true"/> 
</bean> 

nếu được định cấu hình sau đó kiểm tra xem bộ điều khiển có định nghĩa chính xác hay không. nếu ở trên được thực hiện một cách chính xác, thì nó phải có cấu hình bảo mật mùa xuân.

Các vấn đề liên quan