Добавление ролевой логики на пружинный контроллер - PullRequest
0 голосов
/ 01 марта 2019

Так что я искал решение, но я не могу найти ничего, что именно то, что я хочу, я ищу перегрузить метод для различных разрешений, основанных на пользователе.Я использую Spring boot и Spring security.Например:

@ResponseBody
@GetMapping("/role")
@Secured("ROLE_ADMIN")
public ResponseEntity<String> areYouAdmin() {
    return new ResponseEntity<>("ADMIN YES", HttpStatus.OK);
}

@ResponseBody
@GetMapping("/role")
@Secured("ROLE_USER")
public ResponseEntity<String> areYouUser() {
    return new ResponseEntity<>("USER YES", HttpStatus.OK);
}

так что здесь, если пользователь ROLE_USER, он получит ответ «USER YES», а ROLE_ADMIN будет «ADMIN YES».Я знаю, что это возможно, добавив проверку в фактическом методе и используя роль в качестве условия, но задаваясь вопросом, существует ли более чистый подход.Возможный вариант использования здесь был бы, если бы они искали ресурс, и если бы они были пользователем, он отображал бы только те, где статус был ОТКРЫТ или что-то еще, тогда администратор может фильтровать и искать по всему статусу.Другой вариант, если мы хотим вернуть другое dto, то есть администратор может просматривать всю информацию о пользователе.

Я также думал о том, чтобы просто использовать другой путь и использовать мою конфигурацию веб-безопасности, IE:

        .antMatchers("/api/admin").hasRole(ADMIN)
        .antMatchers("/api/user").hasRole(USER)

но я действительно не хочу, чтобы мой интерфейс был "умным", сервер должен просто отображать данные в зависимости от роли без каких-либо специальных путей или нового сервлета.Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 01 марта 2019

Обычно URL-адреса, относящиеся к администрированию, начинаются с / admin / **, поэтому, на мой взгляд, рекомендуется использовать разные URL-адреса для администратора и пользователя, как в файле конфигурации.

Вы можете использовать тот же URL-адресдля различных ролей, как показано ниже

// REST version, Content-type is "application/json"
@RequestMapping(value = "/", consumes = "application/json")
public void myRestService() {
...

// HTML version, Content-type is not "application/json"
@RequestMapping(value = "/", consumes = "!application/json")
public void myHtmlService() {
...

// the url is /?role=guest
@RequestMapping(value = "/", param = "role=guest")
public void guestService() {

// the url is / with header role=admin
@RequestMapping(value = "/", headers = "role=admin")
public void adminService() {

Пользовательские свойства @ RequestMapping

Для получения более подробной информации см. См.1 и См. 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...