HttpServletRequest request.getHeader() 始终为 null?

问题描述 投票:0回答:1

我有一个问题,

HttpServletRequest request.getHeader("Authorization")
始终为空值,我使用角度服务发送带有标头的获取请求,但这些似乎永远不会到达。

我使用 Spring Boot 作为我的 REST 服务器。 Angular 作为我的前端。

用户.service.ts

getUserDetails(username): Observable<any> {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      // tslint:disable-next-line: object-literal-key-quotes
      'Authorization': sessionStorage.getItem('token'),
    });
    // tslint:disable-next-line: object-literal-shorthand
    console.log(`http://localhost:8080/users/` + username, { headers: headers });
    return this.http.get(`http://localhost:8080/users/` + username, { headers: headers }).pipe(
      map(
        userData => {
          console.log(userData);
          return userData;
        }
      ));
  }

JWTRequestFilter.java

@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;
        // JWT Token is in the form "Bearer token". Remove Bearer word and get
        // only the Token
        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");
            }
        } else {
            logger.warn("JWT Token does not begin with Bearer String");
        }
        // Once we get the token validate it.
        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
            UserDetails userDetails = this.jwtUserDetailsService.loadUserByUsername(username);
            // if token is valid configure Spring Security to manually set
            // authentication
            if (jwtTokenUtil.validateToken(jwtToken, userDetails)) {
                UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
                        userDetails, null, userDetails.getAuthorities());
                usernamePasswordAuthenticationToken
                        .setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
                // After setting the Authentication in the context, we specify
                // that the current user is authenticated. So it passes the
                // Spring Security Configurations successfully.
                SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
            }
        }
        chain.doFilter(request, response);
    }

网络流量:

当我进入调用 get 请求的帐户页面时

http://localhost:8080/users/testUser

requestTokenHeader 始终为空?

希望大家能帮帮我。 预先感谢。

angular spring security filter token
1个回答
0
投票

是授权不是授权

© www.soinside.com 2019 - 2024. All rights reserved.