问题描述
|
在Spring 3中,有没有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表明登录的用户是否具有这些权限中的任何一个?我设想做类似的事情:
if(loggedInUserHasAnyOfThesePermissions(\"PERMISSION_READ,PERMISSION_EDIT\")){
//do stuff
}
当前,由于不知道任何此类内置方法,我正在这样做:
Set<String> permissions = new HashSet();
for (GrantedAuthority auth : SecurityContextHolder.getContext().getAuthentication().getAuthorities()) {
permissions.add(auth.getAuthority());
}
if (permissions.contains(\"PERMISSION_READ\") || permissions.contains(\"PERMISSION_EDIT\")) {
//do stuff
}
我已经搜索了几个小时,还没有找到一种更简洁,更优雅的方法,但是必须存在。谢谢你的帮助!
附言我已经熟悉如何在JSP中处理这样的权限:(如何通过Spring安全性有条件地向登录用户显示jsp内容)但是我现在需要的是一种在控制器中进行检查的方法。
解决方法
在Spring 3中,有没有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表明登录的用户是否具有这些权限中的任何一个?
不,那里没有。
我最终定义并实现了自己的便捷API来执行这种操作。
, 您可以使用Spring安全性,而不是使用在方法级别上运行的“前”和“后”注释。
前置注释后面的实际逻辑可能可以访问,因此您可以完成所需的操作。
,
HttpServletRequest
具有方法isUserInRole
,这可能是有用的。例:
public String someControllerMethod(HttpServletRequest request,...) {
boolean read = request.isUserInRole(\"PERMISSION_READ\");
...
}
,
在Spring 3中,有没有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表明登录的用户是否具有这些权限中的任何一个?
您是否在谈论可以评估诸如hasAnyRole([role1,role2])
之类的ExpressionUtils?
, 我最终编写了自己的类:MyUserDetails类具有多种方法,包括一种迭代角色和权限以查看用户具有的所有权限的方法,例如:
for (Permission permission : role.getPermissions()) {
permissions.add(new GrantedAuthorityImpl(permission.getName()));
}
这很丑陋,但是我还没有更好的方法。
我通过做类似的事情来使用它:
MyUser loggedInUser = myUserDAO.getByUsername(principal.getName());
MyUserDetails loggedInUserUD = new MyUserDetails(loggedInUser);
if (loggedInUserUD.hasAnyPermission(\"perm1,perm2\")){
//do stuff
}