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来实现。请参见下面的示例代码。

@Configuration

public 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

回到顶部