1. 程式人生 > 資料庫 >Spring boot Filter無法注入redisTemplate

Spring boot Filter無法注入redisTemplate

看了好多大佬的文章,並沒有很好的解決問題。
描述一下版本

  <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();
	}

}