Можно ли настроить безопасность так, чтобы только методы и конечные точки были ограничены в доступе, если аннотировано @RolesAllowed - PullRequest
0 голосов
/ 13 января 2020

В настоящее время я использую Spring Boot 2 Server с Spring Security, и мне нужно настроить каждый URL в Configuration, если он не должен ограничивать доступ. Но я думаю, что было бы намного проще, если бы все методы и конечные точки разрешали все запросы и ограничивали их, только если добавлена ​​аннотация @RolesAllowed выше. Так есть ли способ настроить Spring Security таким образом?

Моя текущая конфигурация для аутентификации:

@Override
        protected void configure(HttpSecurity http) throws Exception {

            http.cors().and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                    .exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint).and()
                    .authorizeRequests()
                    .antMatchers(urls).permitAll()
                    .anyRequest().authenticated().and()
                    .addFilterBefore(tokenAuthenticationFilter(), BasicAuthenticationFilter.class);

            http.csrf().disable();
        }

Пример авторизации:

@GetMapping(value = "/all")
    @RolesAllowed(value = Role.ADMIN)
    public final ResponseEntity<?> getAll() {
      ...
}

1 Ответ

0 голосов
/ 13 января 2020

Я думаю, hasRole в методе контроллера поможет.

    @PreAuthorize("hasRole('ADMIN')")
    @PostMapping(value = "/someaction", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    @ResponseStatus(value = HttpStatus.OK)
    public ResponseEntity<?> someaction() {
        return null;
    }

Ваша конфигурация безопасности должна выглядеть примерно так. addFilterBefore должен быть раньше.

    @Override
protected void configure(HttpSecurity http) throws Exception {

http
    .cors()
    .and()
    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    .and()
    .addFilterBefore(tokenAuthenticationFilter(), BasicAuthenticationFilter.class) 
    .exceptionHandling().authenticationEntryPoint(restAuthenticationEntryPoint)
    .and()
    .authorizeRequests()
    .antMatchers(urls).permitAll()
    .anyRequest().authenticated();

http.csrf().disable();
}
...