Spring安全性:使用角色限制表单交互性

时间:2016-05-03 10:18:33

标签: java spring spring-mvc spring-security

我有一个表单,允许用户根据他们分配的角色与其进行交互。例如,我的应用程序具有角色role_user,此角色仅允许用户查看表单内容(不编辑表单或提交表单)以及可以查看/编辑/提交表单的角色role_admin

后端(服务层)非常直接使用这些限制进行编码我在任何服务类/方法上使用@PreAuthorize("hasRole('role_admin')"),这将导致为我的表单保存更改。例如,我将表单保存在提交上的方法只允许role_admin个用户执行此操作。

@PreAuthorize("hasRole('role_admin')")
public void saveForm(MyForm myform){
//Save form here
}

在前端(jsp,jstl和spring表单)我设置一个变量来确定谁登录。例如,如果用户是{{1},则下面将isUser设置为true }否则role_user

false

如果isUser为true,我将userClass应用于我的表单,否则isAdmin的adminClass为true(例如见下文)。

  <security:authorize access="hasRole('ROLE_USER')" var="isUser" />
  <security:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin" />

然后我使用css来应用与每个角色相关的样式,并使用javascript来禁用所有表单字段,如果类&#34; userClass&#34;已设置(<c:choose> <c:when test='${isAdmin}'> <c:set var="roleClass" value="adminClass"/> </c:when> <c:when test='${isUser}'> <c:set var="roleClass" value="userClass"/> </c:when> <c:otherwise> <c:set var="roleClass" value="userClass"/> </c:otherwise> </c:choose> <form:form class="${roleClass}"> 谁不能编辑任何内容)。

这是我目前的解决方案,并且发现当我添加更多具有不同限制的角色时(例如,仅为某些新角色禁用特定表单字段),维护变得更加麻烦。他们是否有更好/推荐的方法在前端表格上应用这些限制?

谢谢,

1 个答案:

答案 0 :(得分:0)

您需要的是Spring Security Access Control Lists (ACL)

使用此功能,您可以拥有每个角色的权限(查看,添加,编辑,删除)(ROLE_USER,ROLE_ADMIN)。

在您的代码中,您只需检查ROLE是否具有特定权限。

这样您的应用程序将不依赖于ROLE。

此框架非常灵活,允许您在较低级别指定具有权限的用户或角色可以操纵哪些对象。

您可以看到tutorial