我正在尝试创建一个简单的论坛,只是为了掌握 Spring Security 和 MVC 框架。
为了简单起见,我有一个 JSP 来查看论坛帖子,如下所示:
<body>
...
Title: ${forumPost.title} <br>
Author: ${forumPost.author.name} <br>
Message: {forumPost.message} <br>
<security:authorize ifAnyGranted="ROLE_ADMIN">
Edit: <a href="/edit">Edit</a>
</security:authorize>
...
</body>
我的问题是:不仅管理员应该能够编辑这篇文章,而且原作者也应该能够。因此,我只希望 ROLE_ADMIN 和原作者能够看到编辑链接。但是我不确定如何使用以下命令按用户进行过滤安全:授权标签,或者我是否需要以不同的方式解决这个问题。
任何建议将不胜感激。谢谢!
假设您有一个控制器位于此页面后面,我只需添加一个canEditPost
场到ModelAndView
看起来像(半伪代码):
private boolean isAdmin() {
Authentication currentAuthObj = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> authorities = Arrays.asList(currentAuthObj.getAuthorites());
for (GrantedAuthority auth : authorities) {
if ("ROLE_ADMIN".equals(auth.getAuthority())) {
return true;
}
}
return false;
}
boolean currentUserIsAuthor = ...;
modelAndView.addObject("canEditPost",
Boolean.valueOf(currentUserIsAuthor || isAdmin());
然后在您看来只需引用 $canEditPost 即可。
通常,视图仅引用模型中的简单标志比让视图/模板执行实际逻辑更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)