Spring安全筛选器对数据库的单个调用



我创建了一个Filter,它肯定会在每个请求中被调用。我有一个数据库调用:dbService.getNeeded()。如何只进行一次调用并在整个筛选器调用中使用它?

public class MyFilter extends OncePerRequestFilter {
@Autowired
private DBService dbService;
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
boolean isNeeded = dbService.getNeeded();
if (isNeeded) {
// do something
}
}
}

我的建议是在application.properties文件而不是DBService中设置isNeeded的值。这样,在整个应用程序运行之前,它将始终是一个单一的值。

您可以在过滤器中使用@Value注释,并在src/main/resources/application.properties中有一个值:

应用程序属性

isNeeded=true

使用@Value注释更新代码

public class MyFilter extends OncePerRequestFilter {
@Value("${isNeeded}")
private boolean isNeeded;
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {

if (isNeeded) {
// do something
}
}
}

还有其他选项可以从其他属性文件中读取属性。阅读此处:

如何使用Spring Boot 从java属性文件读取数据

最新更新