繁体   English   中英

如何在 Spring 引导应用程序中的请求 Scope Bean 中设置值

[英]How to Set Values in a Request Scope Bean in Spring Boot Application

在我的应用程序中,我想创建一个请求范围的 Bean,用于存储登录的用户详细信息,并从我的 JWT 令牌验证过滤器中实例化它,因为我已经在那里查询记录。 但是,我不知道最好的方法是什么。 一种选择是我必须直接更新 bean 的值,但不确定这是否是一种好方法。

@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public AppUser loggedInUserDetails() {
   return new AppUser();
}

请求过滤器:

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
    final String authorizationHeader = request.getHeader("Authorization");

    String username = null;
    String jwt = null;

    if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
        jwt = authorizationHeader.substring(7);
        username = jwtUtil.extractUsername(jwt);
    }

    if (username != null) {
        UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
        // Here I want to update the bean
        .....
    }
    chain.doFilter(request, response);
}

如果有任何更好的方法来实例化此 bean,请提出建议。

我正在使用 Spring Boot v2.4.2

如果你想在 JWT 上添加一些逻辑(比如拒绝无效请求和类似的东西)唯一可行的解决方案是你提出的那个,如果你不关心做那些事情你也可以将请求注入 bean并将其直接读入 bean

正如您可能知道的那样,只需添加

private @Autowired HttpServletRequest request;

并重用您现在在过滤器中使用的代码

再见

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM