java—如何在spring引导应用程序的请求范围bean中设置值

mrphzbgm  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(344)

在我的应用程序中,我想创建一个请求范围的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,那么请建议。
我使用的是SpringBootV2.4.2

uemypmqf

uemypmqf1#

如果您想在jwt上添加一些逻辑(比如拒绝无效的请求之类的),唯一可行的解决方案就是您提出的解决方案,如果您不关心这样做,您还可以将请求注入bean并将其直接读入bean
你可能知道,加上

private @Autowired HttpServletRequest request;

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

相关问题