Spring boot 从rest控制器中的安全令牌获取数据

Spring boot 从rest控制器中的安全令牌获取数据,spring-boot,spring-security,jwt,Spring Boot,Spring Security,Jwt,我正在使用SpringMVC和SpringSecurityforREST控制器,我也在使用JWT。在某些情况下,我需要从令牌中获取用户名以将其作为函数参数提供 现在我通过在安全过滤器中将用户名设置为请求属性来解决这个问题。 你能给我一个更好的建议吗 休息控制器: @GetMapping(path = "/user", produces = "application/json") public String getUserFromToken(@Req

我正在使用SpringMVC和SpringSecurityforREST控制器,我也在使用JWT。在某些情况下,我需要从令牌中获取用户名以将其作为函数参数提供

现在我通过在安全过滤器中将用户名设置为请求属性来解决这个问题。 你能给我一个更好的建议吗

休息控制器:

@GetMapping(path = "/user", produces = "application/json")
    public String getUserFromToken(@RequestAttribute(name = "username") String username) throws JsonProcessingException {
        List<Data> dataSet = userService.doSomeProcessing(username);
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.writeValueAsString(dataSet);
    }

你应该读一读关于校长的书


在那里,您将找到这个春季安全问题的解决方案,您自己也遇到了一个类似的问题,谢谢您的提问,祝您好运

您应该阅读有关principal的内容

在那里你会找到解决这个春季安全问题的方法,你自己也遇到过类似的问题,谢谢你的提问,祝你好运

@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        final String requestTokenHeader = request.getHeader("Authorization");
        String username = null;
        String jwtToken = null;
        if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) {
            jwtToken = requestTokenHeader.substring(7);
            try {
                username = jwtTokenUtil.getUsernameFromToken(jwtToken);
            } catch (IllegalArgumentException e) {
                System.out.println("Unable to get JWT Token");
            } catch (ExpiredJwtException e) {
                System.out.println("JWT Token has expired");
            }
        }

        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
            UserDetails userDetails = this.userService.loadUserByUsername(username);

            if (jwtTokenUtil.validateToken(jwtToken, userDetails)) {
                UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
                        userDetails, null, userDetails.getAuthorities());
                usernamePasswordAuthenticationToken
                        .setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
                SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
                request.setAttribute("username", jwtTokenUtil.getUsernameFromToken(jwtToken));
            }
        }
        chain.doFilter(request, response);
    }