2014-04-25 2 views
5

Spring 프로젝트에서 NullPointer 예외의 원인을 파악할 수 없습니다. 언젠가는 프로젝트가 잘 작동하지만 언젠가는 던지는 널 포인터 예외는 여기에 전체 스택 트레이스입니다.Spring 프로젝트를 실행하는 동안 널 포인터 예외가 발생했습니다.

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) 

나는 또한 매우 자주 permgenspace 오류가 발생합니다. 이것과 관련이 있습니까? 나는에 (하고, NetBean IDE를 사용) 내 프로젝트와 바람둥이 VM 옵션을 변경 : 나는 아파치 톰캣 7.0.37, 봄 3.1.1, 최대 절전 모드 넷빈즈 IDE 7.3.1을 사용하고

-XX:MaxPermSize=512m 

3.

Exception에서 DelegatingFilterProxy를 보여줍니다. 그것 때문에 보안 설정.

<?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 :

내가 URL 다음

localhost:8080/xxxx/index 

내가 브라우저에서 다음을받을으로, 인덱스 파일의 web.xml에 정의 된 응용 프로그램에 대한 환영 파일에 액세스하는 것을 시도하고있다 :

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 내 디렉토리. /index에 대한 spring security intercept url 태그에서 매핑을 정의해야합니까?

+0

문제에 대한 명확한 정보없이 다른 사람에게 대답하기가 어렵습니다.이 오류가 발생한 곳과 같은 문제에 대해 자세히 설명 할 수 있습니까? war 파일을 jboss에 배포 할 때? 무슨 jboss 버전, 이클립스 버전처럼 사용하는 모든 구성입니다. – Ami

+0

웹 컨텐츠에 redirect.jsp가 있습니까? – AdityaKeyal

+0

@AdityaKeyal : yes – Dramorian

답변

1

실제로 예외는 리디렉션 페이지가 세션을 필요로하고 페이지 컨텍스트 설정 machanism (PageContextImpl.java:146)이 세션을 만들려고 할 때 발생합니다. 세션 ID 생성기는 어떻게 든

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; 
     } 

문제 간헐적으로 here을보고하고 문제에 대한 의견을 많이가되어 발생하는이 같은 널 (null)이 시간 그러나. 당신을 도울 수있는 힌트가 있는지보십시오.

+0

봄 보안 구성을 살펴 보시기 바랍니다, 나는이 예외가 봄 보안 때문이라고 생각합니다. – Dramorian

+0

구성이 정상적인 것 같습니다. redirect.jsp는 어떻게 호출되고 있습니까? Tomcat 7에서 Spring 보안을 오랫동안 사용 해왔고 그런 문제를 상기 할 수 없습니까? – Shailendra

+0

redirect.jsp가 아니라 index.jsp입니다. 프로젝트 (web.xml)에 대한 환영 파일. stacktrace를 업데이트했습니다. – Dramorian

2

문제점의 근본 원인은 tomcat ManagerBase의 null sessionIdGenerator입니다.

code을 간략히 살펴보십시오. Manager가 아직 시작되지 않았거나 이미 중지 된 경우에만 가능합니다. 내 생각 엔 여기에 코드가 "이미 중지 된"관리자를 사용하고있는 것입니다.

내가 틀렸다면 정정 해주세요.하지만 응용 프로그램을 배포 취소/배포 한 후에 만 ​​(이 경우 완전히 바람둥이를 다시 시작하지 않고)이 충돌이 발생했다고 생각합니다.

여기서 ManagerBase의 잘못된 인스턴스는 어디에서 유래 되었습니까?

음, 말하기는 쉽지 않지만, 응용 프로그램을 배포 취소 할 때 ThreadLocal 변수가 제대로 정리되지 않았다고 생각됩니다. 그래서 자신의 코드를 검사하여 ThreadLocal 변수를 잘못 사용하지 않았는지 확인하십시오 (필터를 요청한 사용자의 finally 블록에있는 모든 ThreadLocal 변수를 항상 정리하십시오).

자신의 코드에서 아무것도 찾을 수없는 경우 :주의 모든 로그 (특히 경고)을 검사

당신이 당신의 웹 응용 프로그램을 배포 배포 취소/때 발생하는, 그들은 당신이 뭔가를 찾을 좋은 기회는 "리소스 X는 공개 할 수 없습니다."

반복적 인 OutOfMemory 오류에 대해 :이 문제와 관련 될 수 있습니다. 실제로, 일부 ThreadLocal 변수가 앱 배포가 취소되거나 배포 될 때 올바르게 정리되지 않으면 메모리 누수가 발생하여 결국 OutOfMemory가 발생할 수 있습니다.

도움이되기를 바랍니다. (앱을 배포 취소/배포 할 때 게시 로그가 재미있을 수 있습니다.)

-1

jsp의 응용 프로그램 컨텍스트에서보기 확인자를 구성 했습니까?

<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> 

구성되어있는 경우 컨트롤러에 올바른 정의가 있는지 확인하십시오. 위에서 설명한대로 을 올바르게 수행 한 경우 스프링 보안 구성을 사용해야합니다.

관련 문제