Итак, я искал решение, но не могу найти ничего, что мне нужно, я пытаюсь перегрузить метод для разных разрешений в зависимости от пользователя. Я использую 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, он получит ответ «ПОЛЬЗОВАТЕЛЬ ДА», а ROLE_ADMIN будет «АДМИН ДА». Я знаю, что это возможно с добавлением проверки в фактический метод и использованием роли в качестве условия, но интересно, есть ли более чистый подход. Возможным вариантом использования здесь было бы, если бы они искали ресурс, и если бы они были пользователями, он отображал бы только те, у которых был статус OPEN или что-то в этом роде, тогда как администратор может фильтровать и искать по всем статусам. Другим может быть, если мы хотим вернуть другой dto, т.е. администратор может просматривать всю информацию о пользователе.
Я также подумал о том, чтобы просто использовать другой путь и использовать мою конфигурацию веб-безопасности, IE:
.antMatchers("/api/admin").hasRole(ADMIN)
.antMatchers("/api/user").hasRole(USER)
но я действительно не хочу, чтобы мой внешний интерфейс был «умным», бэкэнд должен просто отображать данные в зависимости от роли без каких-либо специальных путей или нового сервлета. Заранее благодарю за любую помощь!
Можете ли вы иметь два GetMapping с одним и тем же путем?
Мой ответ разрешает ваши сомнения? Если решено, закройте проблему, приняв ответ
@PatelRomil нет, я специально сказал, что не хочу использовать разные маршруты в своем вопросе.




Обычно 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.
Возможно, этот похожий пост поможет: stackoverflow.com/questions/17995744/…