【发布时间】:2017-01-04 19:01:20
【问题描述】:
很容易根据实现 Spring Security 定义的用户权限在 JSP/JSTL 中隐藏字段。人们可以很容易地写出这样的东西:
<%-- 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,我的问题是如何做到这一点。在我未来的项目中,我想使用带有 Angular JS、AJAX 请求和 JSON 响应的纯 HTML 文件。
例如,我可以创建一个 API 来返回这样的消息:
GET /api/v1/message/{msgId}
如果用户没有PRIV_READ_MESSAGE权限,这个API的JSON响应会是这样的:
{
"messageId": 123,
"title": "Sample Message 101"
}
如果用户拥有该权限,则此 API 的 JSON 响应如下:
{
"messageId": 123,
"title": "Sample Message 101",
"text": "Message Body will be included..."
}
假设我已经实现了以下 Spring 控制器:
@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);
}
我不想在我的控制器方法中添加 if/else 来检查登录的用户是否有足够的权限。我可以根据用户权限在某处过滤 JSON 响应字段吗?
您可以假设 ThreadLocal 变量用于存储当前用户的权限。
【问题讨论】:
标签: java json spring spring-security