Spring Boot читает токен JWT, который не следует отправлять - PullRequest
0 голосов
/ 08 мая 2020

У меня странная проблема. База данных пуста. Нет пользователей. Конечно, я разрабатываю и думаю, что мой JWTToken хранится в localStorage (я знаю, что это не очень хорошо и будет изменено).

httpOptions запроса ниже:

const httpOptions = {
  headers: new HttpHeaders({ "Content-Type": "application/json" }),
};

Angular отправляет запрос Spring Boot с помощью этого метода:

  login(credentials) {
     console.log(httpOptions);
     return this.http
       .post<AuthenticationResponseData>(
         SIGNIN_API,
         {
           username: credentials.username,
           password: credentials.password,
         },
         httpOptions
       )
       .pipe(
         tap((resData) => {
           this.handleAuthentication(
             resData.userId,
             resData.username,
             resData.email,
             resData.accessToken
           );
         })
       );
   }

Здесь нет ничего особенного. Ошибка возникает в AuthTokenFilter в Spring Boot:

 public class AuthTokenFilter extends OncePerRequestFilter {
     private static final Logger logger = LoggerFactory.getLogger(AuthTokenFilter.class);

     @Autowired
     private JwtUtil jwtUtil;

     @Autowired
     private UserDetailsServiceImpl userDetailsService;

     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
             throws ServletException, IOException {
         try {
             String jwt = parseJwt(request);
             if (jwt != null && jwtUtil.validateJwtToken(jwt)) {
                 String username = jwtUtil.getUserNameFromJwtToken(jwt);

                 UserDetails userDetails = userDetailsService.loadUserByUsername(username);
                 UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
                         userDetails, null, userDetails.getAuthorities());
                 authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

                 SecurityContextHolder.getContext().setAuthentication(authentication);
             }
         } catch (Exception e) {
             logger.error("Cannot set user authentication: {}", e);
         }

         filterChain.doFilter(request, response);
     }
...
 }

Каким-то образом Spring Boot получает JWTToken из HttpServletRequest. Он всегда будет выдавать мне ошибку

org.springframework.security.core.userdetails.UsernameNotFoundException: User Not Found with username: DemoUser

Независимо от того, что я добавляю в маску входа. Эти учетные данные верны, но мне нужно предотвратить отправку JWTToken с помощью loginRequest. Откуда это?

...