Как использовать метод CRUD в моем коде, но предотвратить доступ к конечной точке - PullRequest
0 голосов
/ 17 июня 2019
@Entity
public class MyEntity {
   @Id
   @GeneratedValue
   private Long id;
   private String name;
}

@RepositoryRestResource
public interface MyEntityRepository extends JpaRepository<MyEntity, Long> {
   @Secured("ADMIN")
   @Override
   <S extends Test> S save(S entity);
}

@RestController
public class MyController {

    @Autowired
    private MyEntityRepository myEntityRepository;

    @RequestMapping("/")
    public void something() {
        myEntityRepository.save(new MyEntity());
    }
} 

Примечание. Настройки безопасности, связанные с пользователем, уже завершены.

Итак, мой вопрос: я надеюсь использовать метод save в моем коде без каких-либо полномочий, но запретить публичный доступ к save клиенту.

Если я попробовал как в примере выше, я тоже не могу использовать. Как я могу это сделать? Возможно ли это?

В скором времени

Access for Controller to save -> "/" : Permit All
Access for Data Rest's save Endpoint -> "/metrics" : hasRole("ADMIN")

1 Ответ

0 голосов
/ 17 июня 2019

Надеюсь, это сработает для вашего сценария, если я понимаю ваш вопрос.

@ Открытый класс EnableWebSecurity WebSecurityConfig расширяет WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/metrics").hasAnyRole(ADMIN.toString())
            .anyRequest().permitAll()

}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("admin").password("admin").roles(ADMIN.toString())
            .and()
            .withUser("guest").password("guest").roles(GUEST.toString());
}

}

...