2012-01-20 55 views
2

我有一个应用程序使用j_security进行基于表单的身份验证。当应用程序第一次部署时(或者tomcat重新启动时),用户在尝试直接访问受保护的内容时(无需登录)会得到此异常。Tomcat 7 - java.lang.NoClassDefFoundError:无法初始化类javax.servlet.http.Cookie

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

回答

-1

迁移确保你没有在你的应用程序的WEB-INF/lib中的servlet-api.jar文件之前。

如果你有,它将被两个不同的类加载器加载,并可能导致奇怪的错误消息,如你有。

除此之外,尝试在全新安装的tomcat中运行您的应用程序。

+0

为什么downvote?即使现在我确信这是需要照顾的。 –

相关问题