【问题标题】:Grails App Deployed as ROOT.war, j_spring_security_check throwing NPE and HTTP 500Grails 应用程序部署为 ROOT.war,j_spring_security_check 抛出 NPE 和 HTTP 500
【发布时间】:2011-05-26 19:27:06
【问题描述】:

Grails 1.3.6 Tomcat6

我创建了一个生产 ROOT.war。删除了默认的 tomcat ROOT 目录。部署 ROOT.war 并启动 tomcat。该应用程序启动得很好。但是,似乎弹簧安全过滤器没有正确处理。对于初学者,我可以访问受保护的页面,但由于无法访问登录的主体而引发错误。另一个问题是,在我提交登录凭据后,服务器在http://host:8080/j_spring_security_check 上返回 NPE 和 HTTP 状态代码 500。

我应该注意,我在本地有 app.context=/ 在 application.properties 中,并且在本地一切都可以在 http://localhost:8080/ 处正常工作

这里有人有什么想法吗?

更新:无论出于何种原因,这一次我获得了更多 NPE 的堆栈跟踪,所以我将其发布在这里

java.lang.NullPointerException

    at org.apache.tomcat.util.buf.ByteChunk.equalsIgnoreCase(ByteChunk.java:563)

    at org.apache.tomcat.util.buf.MessageBytes.equalsIgnoreCase(MessageBytes.java:335)

    at org.apache.tomcat.util.http.MimeHeaders.getValue(MimeHeaders.java:289)

    at org.apache.tomcat.util.http.MimeHeaders.getHeader(MimeHeaders.java:318)

    at org.apache.coyote.Request.getHeader(Request.java:330)

    at org.apache.catalina.connector.Request.getHeader(Request.java:1877)

    at org.apache.catalina.connector.RequestFacade.getHeader(RequestFacade.java:643)

    at javax.servlet.http.HttpServletRequestWrapper.getHeader(HttpServletRequestWrapper.java:80)

    at org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils.isAjax(SpringSecurityUtils.java:299)

    at org.codehaus.groovy.grails.plugins.springsecurity.AjaxAwareAuthenticationSuccessHandler.determineTargetUrl(AjaxAwareAuthenticationSuccessHandler.java:42)

    at org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler.handle(AbstractAuthenticationTargetUrlRequestHandler.java:67)

    at org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler.onAuthenticationSuccess(SimpleUrlAuthenticationSuccessHandler.java:42)

    at org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler.onAuthenticationSuccess(SavedRequestAwareAuthenticationSuccessHandler.java:63)

    at org.codehaus.groovy.grails.plugins.springsecurity.AjaxAwareAuthenticationSuccessHandler.onAuthenticationSuccess(AjaxAwareAuthenticationSuccessHandler.java:65)

    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.successfulAuthentication(AbstractAuthenticationProcessingFilter.java:301)

    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218)

    at org.codehaus.groovy.grails.plugins.springsecurity.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:40)

    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)

    at org.codehaus.groovy.grails.plugins.springsecurity.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:79)

    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)

    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)

    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)

    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:167)

    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)

    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:69)

    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:65)

    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)

    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)

    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

    at java.lang.Thread.run(Thread.java:636)

【问题讨论】:

    标签: grails spring-security tomcat6


    【解决方案1】:

    看起来应用程序正在执行request.getHeader(ajaxHeaderName),其中名称是:

    String ajaxHeaderName = (String)ReflectionUtils.getConfigProperty("ajaxHeader");
    

    (参见isAjax() 第 294 行 here

    ajaxHeader 的默认值为'X-Requested-With' (here)。

    您是否在 prod 中明确地将配置值设置为不同的值?

    这不是一个非常明确的答案,但也许它会让你走上正确的调试路径。

    【讨论】:

    • 不,关于任何 Ajax,我没有在 prod 上明确设置任何内容。当这个问题出现时,并没有发生 ajax。但感谢您的调查。我会继续挖掘。
    • 这个问题没有真正的答案,因为这个问题与原因无关。因此,我将此答案标记为正确,以感谢您尝试提供帮助。
    • @Gregg - 很高兴你知道了。如果你接受你自己的答案,我不会感到难过,因为我的答案只是黑暗中的一个刺。
    • 没关系。我仍然不能 100% 确定确切的原因是什么,所以即使我自己的答案也是有问题的。
    【解决方案2】:

    好吧,长话短说,它与 Spring Security 没有任何直接关系。我仍在拼凑,但它与我们正在维护的插件(更像是项目模块)、内联插件配置、插件依赖和生产战争的组合有关。

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 2019-10-12
      • 2016-09-07
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多