【发布时间】:2012-03-30 06:00:53
【问题描述】:
我正在尝试将 spring bean 注入过滤器,但无法使其工作。
注入的 bean 始终为“null”。我成功地在 Controllers 和 HandlerInterceptors 中自动装配了同一个 bean,所以它被正确注释了。
过滤器类位于其余控制器的相同基础包下。
这是我的 web.xml 的相关部分
<filter>
<filter-name>CheckSession</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckSession</filter-name>
<url-pattern>/panel/*</url-pattern>
</filter-mapping>
这是过滤器的代码
@Component
public class CheckSession extends OncePerRequestFilter implements Filter {
@Autowired private Usuario usuario;
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
// always null
System.out.println("autowired " + usuario);
chain.doFilter(request, response);
}
}
过滤器在每个请求上触发。
这些是“Usuario”bean 中的注释
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Usuario implements java.io.Serializable { ... }
我错过了什么?谢谢!
【问题讨论】:
-
你不应该在'filter-class'中使用你的确切类名吗?你确定你的过滤器是由 Spring 管理的吗?你不应该在这里使用@Configurable 吗?
-
过滤器名称为CheckSession,与“filter-name”中的相同。如果我在“filter-name”中更改该名称,我会从 Spring 中得到一个“NoSuchBeanDefinitionException”。所以我想是的,过滤器由 Spring 管理(通过 DelegatingFilterProxy),但自动装配机制仍然无法正常工作...... :(