我有一个使用j_security进行基于表单的身份验证的应用程序。当第一次部署应用程序(或重新启动tomcat)时,用户在尝试直接访问受保护内容(无需登录)时会收到此异常。
GRAVE: Servlet.service() for servlet [default] in context with path [/mycontext] threw exception [Could not initialize class javax.servlet.http.Cookie] with root cause
java.lang.NoClassDefFoundError: Could not initialize class javax.servlet.http.Cookie
at org.apache.catalina.core.ApplicationSessionCookieConfig.createSessionCookie(ApplicationSessionCookieConfig.java:127)
at org.apache.catalina.connector.Request.doGetSession(Request.java:2875)
at org.apache.catalina.connector.Request.getSession(Request.java:2307)
at org.apache.catalina.connector.RequestFacade$GetSessionPrivilegedAction.run(RequestFacade.java:216)
at org.apache.catalina.connector.RequestFacade$GetSessionPrivilegedAction.run(RequestFacade.java:205)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:894)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:909)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238)
at com.mycompany.myfilter.SaasComponentImpl.getTenantId(SaasComponentImpl.java:284)
例外行为是将用户重定向到登录表单,当用户登录时将其重定向到请求的受保护资源。
但奇怪的是,如果第一个请求发送到重新启动的服务器请求登录表单,这是正常的!似乎在此tomcat找到并正确加载cookie类之后,所有请求都按预期处理。
为什么tomcat找不到lib / servlet-api.jar中确定的Cookie类?恕我直言,当这个类被要求第一次加载时没有mmetter ......它应该适用于任何阀门,servlet,过滤器等......我是对的吗?
PS:在从tomcat 6迁移应用程序之前,此工作正常。
答案 0 :(得分:-1)
确保您的应用程序的WEB-INF / lib中没有servlet-api.jar。
如果有,它将由两个不同的类加载器加载,并可能导致奇怪的错误消息,如你所拥有的。
除此之外,尝试在全新安装的tomcat中运行您的应用程序。