【发布时间】:2015-07-19 22:38:53
【问题描述】:
除了明显的错误配置问题之外,还有什么可能导致 Servlet 过滤器出现 ClassNotFoundException?
我已经在我的 web.xml 文件中定义了 servlet 过滤器:
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>com.foo.security.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
而且,我已经在我的班级中定义了 servlet 过滤器:
package com.foo.security;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
public class SecurityFilter implements Filter{
private static final int MAX_LENGTH = 4096;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Initializing SecurityFilter!!!");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try{
System.out.println("Calling SecurityFilter.doFilter()!!!");
chain.doFilter(request, response);
}catch(Exception e){
}finally{
}
}
@Override
public void destroy() {
System.out.println("Destroying SecurityFilter!!!");
}
}
并且我已经确保它包含在一个 JAR 文件中,并且该 JAR 文件包含在 WEB-INF/lib 目录中,并且该类也包含在 WEB-INF/classes 目录中。
但是,我不断收到此异常:
2015-05-06 13:01:42.926 ERROR [ScannerThread] org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/testApp] - Exception starting filter SecurityFilter
java.lang.ClassNotFoundException: com.foo.security.SecurityFilter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:249)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3722)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4367)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:790)
at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:122)
at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:144)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:768)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)
at sun.reflect.GeneratedMethodAccessor512.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
JAR 文件的内容如下:
META-INF/
META-INF/MANIFEST.MF
com/
com/foo/
com/foo/security/
com/foo/security/SecurityFilter.class
以下是 WAR 文件的内容:
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/com/
WEB-INF/classes/com/foo/
WEB-INF/classes/com/foo/security/
WEB-INF/lib/
WEB-INF/classes/com/foo/security/SecurityFilter.class
WEB-INF/jboss-web.xml
WEB-INF/lib/com.foo.security.jar
WEB-INF/web.xml
【问题讨论】:
-
您是否检查过您的过滤器类是否在正确的包中:com.ge.de.security ?
-
您仍然可以编辑您的问题以包含补语...
-
我认为 Spring 不会阻止您声明标准过滤器。仔细检查您的配置和启动日志。你应该错过了什么。
-
嗯..我一直在看这个 1/2 天,但我没有看到它。一切对我来说似乎都是正确的。顺便说一句 - 这也不是我第一次创建过滤器,我已经使用过滤器好几年了。我将所有内容重命名为 com.foo.security 包并用它编辑了原始帖子。
-
检查此链接可能会有所帮助,stackoverflow.com/questions/11659047/…
标签: java servlets servlet-filters