1

我正在努力弄清楚为什么(无害)空指针异常发生在我们在生产中运行的服务器上,因为一些 bean 尚未设置。这是场景:

  1. 一些用户正在使用 Web 应用程序
  2. Web 应用程序停止
  3. Web 应用程序开始
  4. 几乎立即,Kerberos 身份验证发生在可能仍在运行活动脚本的客户端浏览器中
  5. NPE 发生在 Kerberos 服务身份验证提供程序上,试图调用 UserService(UserDetailsS​​ervice 的实现)——进行了更多的安全检查,导致 NPE 由于预期的 bean 为 NULL

堆栈跟踪片段可以在问题的末尾找到。

我无法在开发环境中重现这一点,所以我希望看到关于为什么会发生这种情况的想法。

注:ZzzzSecurityContextServicelazy-init="true";春季版是2.5.1.

Dec 10, 2012 10:14:11 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
        ...
Dec 10, 2012 10:14:13 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 33849 ms
Dec 10, 2012 10:14:15 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet ZzzzGwtClient threw exception
org.zzzz.system.security.SecurityDataAccessException: Error reading user 'Zzzzzz' info from the database.; nested exception is java.lang.NullPointerException
    at org.zzzz.system.security.UserService.loadUserByUsername(UserService.java:181)
    at org.zzzz.system.security.DelegatingUserDetailsService.loadUserByUsername(DelegatingUserDetailsService.java:21)
    at org.springframework.security.extensions.kerberos.KerberosServiceAuthenticationProvider.authenticate(KerberosServiceAuthenticationProvider.java:89)
    at org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:195)
    at org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46)
    at org.zzzz.session.WebAuthenticationFilter.attemptAuthentication(WebAuthenticationFilter.java:117)
    at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:252)
        ...
Caused by: java.lang.NullPointerException
    at zzzz.services.ZzzzSecurityContextService.getStructureService(ZzzzSecurityContextService.java:241)
    at zzzz.services.ZzzzSecurityContextService.readSecurityContext(ZzzzSecurityContextService.java:50)
    at org.zzzz.system.security.SecurityContextService.getSecurityContext(SecurityContextService.java:41)
    at org.zzzz.system.security.UserService.loadUserByUsername(UserService.java:173)
    ... 29 more
4

0 回答 0