Spring boot Filter無法注入redisTemplate
阿新 • • 發佈:2020-12-20
看了好多大佬的文章,並沒有很好的解決問題。
描述一下版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
描述一下原因
就是在Filter中
@Autowired private RedisTemplate<String, String> redisTemplate;
引用redisTemplate 會報空指標異常
但是此現象在內建tomcat中jar啟動無異常
但是install war 放在tomcat下面執行就會有該異常,具體還沒有研究,有知道的小夥伴留言告知一下。
原因就是Filter載入的時候Ioc還沒有注入,所以會報空指標
我的問題
因為之前我的Filter是這麼寫的。
這樣就不能使用
@Configuration
來指定bean載入的順序
所以先改造一下Filter的寫法
去掉@WebFilter(urlPatterns = “/*”, filterName = “loginFilter”)
然後寫一個@Configuration類
package com.comp.user; import javax.servlet.Filter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.comp.user.filter.LoginFilter; @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<Filter> filterRegistrationBean() { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<Filter>(); bean.setFilter(loginFilter()); bean.addUrlPatterns("/*"); bean.setName("loginFilter"); return bean; } @Bean public LoginFilter loginFilter() { return new LoginFilter(); } }