Скажем, у нас есть конечная точка API, настроенная с использованием Spring MVC и Spring Security. Мы хотели бы иметь возможность обрабатывать пары @RequestMapping и @Secured аннотаций, где единственные значения @Secured annotation отличаются от пары к паре. Таким образом, мы могли бы вернуть другой орган ответа в зависимости от правил безопасности для одного и того же запроса.
Это может позволить нашему коду быть более удобным для обслуживания, избегая проверки правил безопасности непосредственно в теле метода.
С нерабочим примером, вот что мы хотели бы сделать:
@Controller
@RequestMapping("/api")
public class Controller {
@Secured ({"ROLE_A"})
@RequestMapping(value="{uid}", method=RequestMethod.GET)
@ResponseBody
public Response getSomething(@PathVariable("uid") String uid) {
// Returns something for users having ROLE_A
}
@Secured ({"ROLE_B"})
@RequestMapping(value="{uid}", method=RequestMethod.GET)
@ResponseBody
public Response getSomethingDifferent(@PathVariable("uid") String uid) {
// Returns something different for users having ROLE_B
}
}
Как мы можем достичь этого? И если это можно сделать: как управлять приоритетом для пользователя, который имеет как ROLE_A, так и ROLE_B?