Скрывать поля в JSP/JSTL было легко в соответствии с пользовательскими привилегиями, определяющими реализацию Spring Security. Можно легко написать примерно так:JSON REST API с функцией Spring Security
<%-- Assume message.title requires no privilege -->
<c:out value="${message.title}" />
<%-- Assume message.text requires PRIV_READ_MESSAGE -->
<security:authorize ifAllGranted="PRIV_READ_MESSAGE">
<c:out value="${message.text}" />
</secrurity:authorize>
Мой вопрос в том, как это сделать, если мы не используем JSP. В моих будущих проектах я хочу использовать простые HTML-файлы с Angular JS, AJAX-запросами и ответами JSON.
Например, я могу создать API, чтобы вернуть сообщение, как это:
GET /api/v1/message/{msgId}
Если пользователь не имеет привилегий PRIV_READ_MESSAGE, ответ JSON этого API будет как:
{
"messageId": 123,
"title": "Sample Message 101"
}
Если пользователь имеет эту привилегию, ответ JSON этого API будет следующим:
{
"messageId": 123,
"title": "Sample Message 101",
"text": "Message Body will be included..."
}
Если предположить, что я реализовал следующий весенний контроллер:
@RequestMapping(value = "api/v1/message/{messageId}", method = RequestMethod.GET)
public ResponseEntity<Message> getMessage(@PathVariable Long messageId) {
// use some magic code to fetch Message from DB
Message message = null;
return new ResponseEntity<>(message, HttpStatus.OK);
}
Я не хочу, чтобы добавить, если/иначе мои методы контроллера для того, чтобы проверить, если зарегистрированный пользователь имеет достаточных привилегий или нет. Могу ли я фильтровать поля ответа JSON где-нибудь в соответствии с пользовательскими привилегиями?
Вы можете предположить, что переменная ThreadLocal используется для хранения привилегий пользователя.