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;
}
}