spring在过滤器中使用@Value批注
我目前正在处理Spring项目,并且正在制作一个新的过滤器,用于检查请求中是否发送了有效的JWT。
我遇到了这样的问题:无法使用@Value注释从application.yml文件中获取值。
@Component@Order(2)
public class JwtConfiguration implements Filter {
@Value("${jwt.secret}")
private String jwtSecret;
我知道这很好用,因为我在单元测试中有同样的事情。
我在某处读到该过滤器不在应用程序上下文中,因此它将无法访问配置,并且无法自动装配依赖关系。
有谁知道从我的application.yml中获取值到过滤器的好技术?
我也没有使用任何XML配置,并且希望使用不使用它们的解决方案。
我正在使用Spring Boot版本1.3.3。
回答:
这可以通过实现ServletContextInitializer来实现。请参见下面的示例代码。
@Configurationpublic class WebConfigurer implements ServletContextInitializer {
@Value("${jwt.secret}")
private String jwtSecret;
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
EnumSet<DispatcherType> disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC);
initFilter(servletContext, disps);
}
private void initFilter(ServletContext servletContext,
EnumSet<DispatcherType> disps) {
FilterRegistration.Dynamic myFilter =
servletContext.addFilter("myFilter",
new MyFilterClass(jwtSecret));
// You can pass null as first parameter to below API calls
myFilter.addMappingForUrlPatterns(disps, true, "/content/*");
myFilter.addMappingForUrlPatterns(disps, true, "/app/*");
myFilter.setAsyncSupported(true);
}
}
编辑/更新:
我想还有另一种使用Java Config添加过滤器的方法
您可以使用FilterRegistrationBean注册过滤器。在这里,您可以使用setOrder方法设置订单。但是认为它会创建与过滤器一样多的ServletContextInitializer,因为FilterRegistrationBean是ServletContextInitializer,
以上是 spring在过滤器中使用@Value批注 的全部内容, 来源链接: utcz.com/qa/432758.html