Spring security zabezpieczanie endpointów

0

Wtiam

Mam problem z konfiguracją spring security. Chodzi o end-pointy z odpowiednimi rolami. Nie mogę uzyskać efektu zabezpieczenia w zależności od roli usera.

Konfiguracja security 'extends WebSecurityConfigurerAdapter'

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http
            .cors()
            .and()
            .csrf()
            .disable()
            .authorizeRequests()
            .antMatchers("/",
                    "/favicon.ico",
                    "/**/*.png",
                    "/**/*.gif",
                    "/**/*.svg",
                    "/**/*.jpg",
                    "/**/*.html",
                    "/**/*.css",
                    "/**/*.js",
                    "/h2-console/**",
                    "/api/auth/login",
                    "/**/**")
            .permitAll()
            .antMatchers("admin/**").hasRole("ADMIN")
            .antMatchers("/student/**").hasRole("USER")
            .anyRequest().authenticated();
    }
```

Ale jak dodam '@PreAuthorize("hasRole('ADMIN')")' przy end-poincie to wszystko śmiga.

Czy ktoś mógł by mi wytłumaczyć jak to dokładnie działa?
0
  1. Sprawdź czy Spring poprawnie widzi twoją konfigurację.
  2. Sprawdź czy role są poprawnie przypisane użytkownikom, dla .hasRole("ADMIN") wartością powinno być ROLE_ADMIN.
  3. Pliki statyczne .js .css itd. można zignorować zamiast pisać im osobne reguły.
0
  1. Nie wiem czy dokładnie to miałeś na myśli ale debugerem wchodzi mi do metody.
  2. Tak w bazie danych posiadam role typu "'ROLE_' + typ".
  3. Sprawdzę jak uda mi się rozwiązać mój obecny problem.

Jakieś inne pomysły?

0
vakil napisał(a):
        .antMatchers("admin/**").hasRole("ADMIN")

Zapomniałeś slasha na początku ;)

No i nie wiem jak ze sobą pożenić to, że dajesz .permitAll() na "/**/**"... Może lepiej usuń akurat te gwiazdki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1