Spring security: метод защиты Http в jwt - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь реализовать пример входа в систему jwt

при настройке метода конфигурации для класса безопасности. Я столкнулся с некоторой проблемой

вот метод для контроллера

@PostMapping("api/user/login")
public ResponseEntity<?> login(Principal principal)
{
    if (principal == null)
    {
        return ResponseEntity.ok(principal);
    }
    UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) principal;
    User user = userService.findByUsername(token.getName());
    user.setToken(jwtTokenProvider.generateToken(token));
    return new ResponseEntity<>(user, HttpStatus.OK);
}

Здесь у меня есть версия http configure

@Override
protected void configure(HttpSecurity http)
    throws Exception
{
    http.cors().and().authorizeRequests().antMatchers("/resources/**", "/error", "/api/user/**")
        .permitAll().antMatchers("/api/admin/**").hasRole("ADMIN").anyRequest()
        .fullyAuthenticated().and().logout().permitAll()
        .logoutRequestMatcher(new AntPathRequestMatcher("/api/user/logout", "POST")).and()
        .formLogin().loginPage("/api/user/login/").permitAll().and().httpBasic().and().csrf()
        .disable();
    http.addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtTokenProvider));
}

Очевидно, что я разрешил api входа в систему как allowall, но все же он идет для фильтра, может кто-нибудь объяснить, что именно происходит

filter код

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
                                FilterChain chain)
    throws IOException,
    ServletException
{
    Authentication authentication = jwtTokenProvider.getAuthentication(request);
    if (authentication != null && jwtTokenProvider.validateToken(request))
    {
        SecurityContextHolder.getContext().setAuthentication(authentication);
    }
    chain.doFilter(request, response);
}

согласно моему обучению, он не должен go в коде фильтра, если я разрешил в качестве allowall в http configure. Пожалуйста, поправьте меня, если я ошибаюсь.

...