Oi, implmentei na API uma tabela de roles, mas estou com problemas ao implementar este controle.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf(csrf -> csrf.disable())
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(req -> {
req.requestMatchers(HttpMethod.POST, "/login").permitAll();
req.requestMatchers(HttpMethod.GET,"/teste").hasRole("ADMIN");
req.anyRequest().authenticated();
})
.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
Tentei validar somente a Role ADMIN para este endpoint e não esta funcionando, todas as outras roles tem o acesso. E se coloco alguma role especifica no login o acesso é negado para todos.
trecho da classe usuario onde eu adicionei as roles
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@Column(name="user_name")
private String login;
private String password;
private boolean enabled;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
private List<Role> roles = new ArrayList<>();
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
roles.forEach(role -> authorities.add(new SimpleGrantedAuthority(role.getName())));
authorities.forEach(a -> System.out.println("authorities "+a.getAuthority()));
return authorities;
//return List.of(new SimpleGrantedAuthority("ROLE_USER"));
}
Preciso realizar alguma configuração diferente para restrigir acesso para alguns endpoints mesmo estando logado com o token?