Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dois ou mais Roles

Estou usando o seguinte controle

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/").hasRole("ADMIN")
            .antMatchers("/conexoes/**").hasRole("ADMIN")
            .antMatchers("/municipios/**").hasRole("ADMIN")
            .antMatchers(HttpMethod.GET, "/").hasRole("USUARIO")
            .antMatchers("/resources/**").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().loginPage("/login").permitAll();
    }

o usuário com role "ADMIN" acessa o "/", porém o usuário com role "USUARIO" da erro de 403 - Access is denied.

Teria como aplicar um if antes de http.authorizeRequests() para verificar se o usuário logado é ADMIN ou USUARIO, e dependendo qual Role ele pertencer eu aplico os controles de acesso?

2 respostas
solução!

Fala Igor, tudo bem ?

Será que precisa mesmo adicionar esse matcher pra /. O que sua aplicação responde nesse endereço padrão ? A home da app ? Se sim, ela não e publica a todos os usuários mesmo ?

Se esse endereço é publico a todos os acessos você pode usar: .antMatchers("/").permitAll().

Se for pra todos os usuários que devem no mínimo estarem logados (independente de role), você pode usar: .antMatchers("/").authenticated() -> O que é a mesma coisa que nem dizer nada sobre a /, dado que qualquer request não mapeado nesse contexto de segurança por padrão está no nível authenticated (que é ativado a partir dessa chamada .anyRequest().authenticated() que diz que qualquer request fora os mapeados serão liberados apenas a quem estiver logado).

Se for disponível apenas pra usuários logados, que possuam uma role específica, você pode usar: .antMatchers("/").hasRole("ADMIN") ou .antMatchers("/").hasRole("USUARIO").

Se for disponível apenas pra usuários logados, que possuam qualquer role dentro das que você tem, você pode usar: .antMatchers("/").hasAnyRole("ADMIN", "USUARIO"). -> Se o usuário estiver logado e tiver qualquer uma das roles informadas.

Espero ter ajudado. Abraço!

.antMatchers("/").authenticated()

resolveu meu problema, muito agradecido pela ajuda Rafael, grande abraço!