Prezados, boa noite!
Conseguem me ajudar por gentileza?
No meu projeto, bloqueei algumas requisições de acesso ao usuário comum, sendo necessário logar com admin.
Bloqueei a exclusão de médicos e pacientes pelo SecurityConfigurations:
@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()
.requestMatchers( "/v3/api-docs/**", "/swagger-ui.html", "/swagger-ui/**").permitAll()
.requestMatchers(HttpMethod.DELETE, "/medicos/**").hasRole("ADMIN")
.requestMatchers(HttpMethod.DELETE, "/pacientes/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
E alguns métodos com a anotação:
@Secured("ROLE_ADMIN")
Obs.: Essa anotação foi colocada no método cadastrar do MedicoController.
Porém, ao tentar realizar a classe de teste para o MedicoController, mesmo com a anotação @WithMockUser, recebo acesso negado.
MockHttpServletResponse:
Status = 403
Error message = null
Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"13", X-Content-Type-Options:"nosniff", X-XSS-Protection:"0", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"]
Content type = text/plain;charset=UTF-8
Body = Acesso negado
Forwarded URL = null
Redirected URL = null
Cookies = []
Expected :201
Actual :403
Realizei um teste excluindo a anotação @Secured("ROLE_ADMIN") do método e o teste passou normalmente.
Desta forma, acredito estar recebendo esse erro (acesso negado) por conta disso. Como fazemos para dizer ao Spring que é necessário um usuário admin? Ou como podemos informar isso no método de teste?