spring安全过滤器对数据库的单个调用

sd2nnvve  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(279)

我创建了一个过滤器,每个请求都会调用它。我有一个数据库调用: 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
         }
    }

}
bwleehnv

bwleehnv1#

我的建议是在application.properties文件中设置isneeded的值,而不是在dbservice中设置。这样,在整个应用程序运行之前,它始终是单个值。
您可以在过滤器中使用@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属性文件读取数据

相关问题