过滤器需要注入service,这个怎么解决呢?
public class LoginFilter implements Filter {
@Autowired
MenusService menusService;
因为filter加载的比spring早,所以spring托管的类还没有实例化,filter就来调用,肯定会报空指针。
这个问题会出现在老项目中,新项目建议使用spring的intercept。
spring为这个问题提供了一个工具:
<filter>
<filter-name>permission</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>permission</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
将DelegatingFilterProxy作为filter注册在web.xml中
将真正的Filter放在spring的配置文件中作为一个bean
<bean id="permission" class="com.bwhx.eruler.filter.LoginFilter"></bean>
!注意:bean id 与filter-name要一致。
!!注意:filter交由spring管理后,就无需再由web.xml管理。不需要再在web.xml中注册了。