在我的应用程序中,我想创建一个请求范围的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
1条答案
按热度按时间uemypmqf1#
如果您想在jwt上添加一些逻辑(比如拒绝无效的请求之类的),唯一可行的解决方案就是您提出的解决方案,如果您不关心这样做,您还可以将请求注入bean并将其直接读入bean
你可能知道,加上
并重用您现在在过滤器中使用的代码
再见