GET, POST, PUT, DELETE на основе аутентификации типа в ключе - PullRequest
2 голосов
/ 25 апреля 2019

У меня есть ресурс в API, для которого URI равен /product/{id} и я выполняю три операции VIEW, GET, DELETE basse on HttpMethod.

Как я могу управлять одним пользователем, разрешено только VIEW, а admin разрешено VIEW, GET, DELETE, т. Е. Все опции.

Я видел Keycloak Adapter Policy Enforcer, но я не понимаю, как это работает. Я не получаю опцию методов в разрешении на создание.

Может кто-нибудь помочь мне в реализации этого или предложить какой-то способ сделать это.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Что вам нужно, так это пружинная защита.Вы можете добавить его в свой проект, используя:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Вы можете определить свои настройки безопасности следующим образом (я предполагаю, что другая конфигурация уже выполнена):

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

// ...

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

        http
                //HTTP Basic authentication
                .httpBasic()
                .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/product/**").hasRole("USER")
                .antMatchers(HttpMethod.POST, "/product").hasRole("ADMIN")
                .antMatchers(HttpMethod.PUT, "/product/**").hasRole("ADMIN")
                .antMatchers(HttpMethod.PATCH, "/product/**").hasRole("ADMIN")
                .antMatchers(HttpMethod.DELETE, "/product/**").hasRole("ADMIN")
                .and()
                .csrf().disable()
                .formLogin().disable();
      }
}
0 голосов
/ 25 апреля 2019

Прежде всего наилучшим подходящим вариантом является использование аннотаций на основе политики michanisam.поэтому перед каждым отдыхом вам нужно написать свою политику доступа, например:

@Secured("ROLE_VIEWER")
public String getUsername() {
    SecurityContext securityContext = SecurityContextHolder.getContext();
    return securityContext.getAuthentication().getName();
}

Таким образом, как вы можете видеть, метод getUsername () будет разрешен только для зрителя.

@Secured("ROLE_ADMIN")
public boolean isValidUsername(String username) {
     return userRoleRepository.isValidUsername(username);
}

Так как вы видите, что вышеупомянутый метод разрешит доступ только администратору, такую ​​же аннотацию можно использовать и для остальных служб.Чтобы использовать эту внешность, вам необходимо интегрировать Spring Security с приложением Spring Boot.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Более подробно вы можете ознакомиться с этим художественным документом, но я вижу, что это лучший способ контролировать безопасность данных ислужба безопасности в приложении весенней загрузки.

Ссылка: https://www.baeldung.com/spring-security-method-security

...