java - 初始化函数后弹簧过滤器丢失设置变量
问题描述
我正在使用的一个简单的弹簧过滤器有一个奇怪的问题。在init
函数中,我设置了一个变量this.test = "TEST1234"
,但由于某种原因,当到达 thendoFilter
函数时,该变量再次恢复为 null。
我的过滤器:
@Component
public class TestFilter implements Filter {
private String test;
public void init(FilterConfig cfg) {
this.test = "TEST1234";
System.out.println("TEST: " + this.test);
}
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("TEST: " + this.test);
}
public void destroy() {}
}
安全配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(
new TestFilter(),
AbstractPreAuthenticatedProcessingFilter.class
);
}
}
控制台输出:
初始化:TEST: TEST1234
doFilter:TEST: null
为什么这个变量恢复为空?我错过了什么吗?是垃圾收集吗?
我在 Java 上运行我的应用程序1.8.0_171
依赖项:
- Spring Boot 入门网站:
2.1.4.RELEASE
- 弹簧安全 jwt:
1.0.10.RELEASE
- 春季安全oauth2:
2.2.1.RELEASE
- Javax 小服务程序:
2.5
解决方案
感谢来自的评论解决了它@dur
。
首先,我删除了@Component
注释,因此我的过滤器不会被实例化两次。
筛选:
public class TestFilter implements Filter {
private String test;
public void init(FilterConfig cfg) {
this.test = "TEST1234";
System.out.println("TEST: " + this.test);
}
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("TEST: " + this.test);
}
public void destroy() {}
}
我还创建了过滤器实例,bean
而不是newFilter()
直接在addFilterBefore()
函数中调用。
安全配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public TestFilter testFilter() {
return new TestFilter();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(
testFilter(),
AbstractPreAuthenticatedProcessingFilter.class
);
}
}
控制台输出(现在符合预期):
初始化:TEST: TEST1234
doFilter:TEST: TEST1234
推荐阅读
- docker - 使用 Dockerfile 时在属性文件中定义变量的语法是什么?
- reactjs - 有没有办法为所有段落标签呈现自定义反应组件?
- c# - 我的分数如何显示在游戏画面中
- python - BeautifulSoup:将标签(包含其他标签)拆分为两个字符串
- javascript - 网络错误:尝试使用 javascript 在客户端 sode 中下载 csv 文件时
- autohotkey - AutoHotKey AHK 停止和退出脚本和时间变量
- javascript - 如何从没有 json 响应 [Javascript] 的非公共 API 站点(如 instagram)获取数据?
- jquery - 停止 jquery 可拖动 div 走出背景图像
- reactjs - Reactjs this.state.Object 未作为道具传递给功能组件
- c++ - 使用 xsdcxx 时如何处理 xsd 中的导入 url?