我有一个Filter类' MyFilter'这是通过@WebFilter
注释注册的。在doFilter()
我需要一个我在项目中创建的MyBeanClass
对象。如果我通过new运算符创建此对象,并在tomcat上运行该项目,我看到过滤器已注册一次并且工作正常。
但是,当我尝试通过在@Component
类上面添加MyFilter
注释来自动装配对象,然后在tomcat上运行项目时,我看到过滤器已注册两次。{{1调用两次,第二次doFilter()
被调用doFilter()
的对象未初始化且为MyBeanClass
。因此null
。
我需要将依赖注入保留到Spring,因此需要自动装配对象。关注点是 -
以下是示例代码: MyFilter.java:
NullPointerException
MyBeanClass.java
@Component
@WebFilter(filterName = "RestFilter", urlPatterns = { "/*" })
public class MyFilter implements Filter {
@Autowired
MyBeanClass myBeanClass;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//this is how I know that filter is registered twice.
System.out.println("this is init.");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (myBeanClass.isValidRequest()) {
System.out.println("Let this request pass");
chain.doFilter(request, response);
}
else{
System.out.println("Should not let pass this request");
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
我是Spring框架的新手,最近开始在Spring开发一个项目。如果我做错了,请纠正我。或者,如果有其他方法可以做到这一点,请将我引导到正确的资源。
答案 0 :(得分:-1)
这是因为您在Application类中添加了@ServletComponentScan
,并在过滤器上使用了@Component
。你可以删除其中任何一个。
顺便说一句,如果您使用@component
,@webfilter
将无效