HttpServletRequest request.getHeader () всегда имеет значение null? - PullRequest
0 голосов
/ 07 ноября 2019

У меня проблема в том, что HttpServletRequest request.getHeader("Authorization") всегда является нулевым значением, я отправляю с угловым сервисом мой запрос на получение с заголовками, но они, кажется, никогда не приходят.

Я использую Spring Boot в качестве моего REST-сервера. И Angular как мой фронтенд.

user.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);
    }

Сетевой трафик:

enter image description here

Когда я иду на страницу учетной записи, где я вызываю запрос на получение http://localhost:8080/users/testUser

RequestTokenHeader всегда нулевой?

Надеюсь, вы, ребята, можете мне помочь. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...