Адаптер Web Security Configurer работает, только если я использую allowAll () - PullRequest
0 голосов
/ 15 октября 2019

My Web Security Configurer не аутентифицирует никакие запросы, если только не используется .permitAll ().

Я пропустил шаг? Любая помощь была бы отличной

Я провел некоторую отладку, чтобы убедиться, что у моих пользователей есть необходимые разрешения (они есть), и все же я все еще не могу заставить работать .antMatchers (...). Первоначально я использовал более конкретные случаи, но сделал их более широкими, просто чтобы посмотреть, смогу ли я получить что-то слишком работающее.

protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/auth/**").permitAll()

            .antMatchers("/api/test/admin").hasRole("ADMIN")

            .anyRequest().authenticated()
            .and()
            .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);


    http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}

Следующий фрагмент кода работает, когда allowAll () используется

@GetMapping("/api/test/admin")
public String adminAccess() {
    //A test for users and roles and is called when the user can enter the page as a test
    List<User> users = userRepository.findAll();
    List<Role> roles = null;

    for(User u: users){
        System.out.print(u.getName());
        for(Role r : u.getRoles()){
           System.out.println(r.getName());
       }
    }
    return ">>> Admin Contents";
}

Фильтр аутентификации JWT

public class JwtAuthTokenFilter extends OncePerRequestFilter {

@Autowired
private JwtProvider tokenProvider;

@Autowired
private UserDetailsServiceImpl userDetailsService;

private static final Logger logger = LoggerFactory.getLogger(JwtAuthTokenFilter.class);

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {
    try {

        String jwt = getJwt(request);
        if (jwt != null && tokenProvider.validateJwtToken(jwt)) {
            String username = tokenProvider.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("Can NOT set user authentication -> Message: {}", e);
    }

    filterChain.doFilter(request, response);
}

private String getJwt(HttpServletRequest request) {
    String authHeader = request.getHeader("Authorization");

    if (authHeader != null && authHeader.startsWith("Bearer ")) {
        return authHeader.replace("Bearer ", "");
    }

    return null;
}

}

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