Java 在Spring3控制器中,如何检查登录用户的权限并有条件地执行某些操作?

Java 在Spring3控制器中,如何检查登录用户的权限并有条件地执行某些操作?,java,security,spring-mvc,permissions,spring-security,Java,Security,Spring Mvc,Permissions,Spring Security,在Spring3中,是否有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表示登录用户是否拥有这些权限?我设想这样做: if(loggedInUserHasAnyOfThesePermissions("PERMISSION_READ,PERMISSION_EDIT")){ //do stuff } MyUser loggedInUser = myUserDAO.getByUsername(principal.getName()); MyUserDetails loggedInUs

在Spring3中,是否有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表示登录用户是否拥有这些权限?我设想这样做:

if(loggedInUserHasAnyOfThesePermissions("PERMISSION_READ,PERMISSION_EDIT")){
    //do stuff
}
MyUser loggedInUser = myUserDAO.getByUsername(principal.getName());
MyUserDetails loggedInUserUD = new MyUserDetails(loggedInUser);
if (loggedInUserUD.hasAnyPermission("perm1, perm2")){
//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
}
Set permissions=new HashSet();
对于(授权授权:SecurityContextHolder.getContext().getAuthentication().GetAuthority()){
permissions.add(auth.getAuthority());
}
if(permissions.contains(“PERMISSION_READ”)| | permissions.contains(“PERMISSION_EDIT”)){
//做事
}
我已经搜索了几个小时,还没有找到一种更简洁、更优雅的方法来做这件事,但肯定有一种方法存在。谢谢你的帮助

另外,我已经熟悉如何在JSP中像这样处理权限:(),但我现在需要的是一种在控制器内检查的方法

在Spring3中,是否有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表示登录用户是否拥有这些权限

不,没有

我最终定义并实现了自己的便利API来完成这类工作

在Spring3中,是否有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表示登录用户是否拥有这些权限

不,没有

我最终定义并实现了自己的便利API来完成这类工作。

您可以使用,而不是使用在方法级别上运行的

pre-a-post注释背后的实际逻辑可能是可访问的,因此您可能可以完成您想要的。

您可以使用,而不是使用在方法级别上运行的


pre-a-post注释背后的实际逻辑可能是可访问的,因此您可能可以完成您想要的。
HttpServletRequest
有一个方法
isUserInRole
,这可能很有用。例如:

public String someControllerMethod(HttpServletRequest request, ...) {
   boolean read = request.isUserInRole("PERMISSION_READ");
   ...
}

HttpServletRequest
有一个方法
isUserInRole
,它可能很有用。例如:

public String someControllerMethod(HttpServletRequest request, ...) {
   boolean read = request.isUserInRole("PERMISSION_READ");
   ...
}
在Spring3中,是否有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表示登录用户是否拥有这些权限

您所说的是可以计算表达式的函数吗,例如
hasAnyRole([role1,role2])

在Spring3中,是否有一种方法可以接受逗号分隔的权限列表,并返回一个布尔值,表示登录用户是否拥有这些权限


你说的是可以计算表达式的方法吗,例如
hasAnyRole([role1,role2])

我最终编写了自己的类:MyUserDetails类有多种方法,包括一种迭代角色和权限以查看用户拥有的所有权限的方法,例如:

for (Permission permission : role.getPermissions()) {
          permissions.add(new GrantedAuthorityImpl(permission.getName()));
        }
这很难看,但我还没有更好的办法

我使用它的方式是:

if(loggedInUserHasAnyOfThesePermissions("PERMISSION_READ,PERMISSION_EDIT")){
    //do stuff
}
MyUser loggedInUser = myUserDAO.getByUsername(principal.getName());
MyUserDetails loggedInUserUD = new MyUserDetails(loggedInUser);
if (loggedInUserUD.hasAnyPermission("perm1, perm2")){
//do stuff
}

我最终编写了自己的类:MyUserDetails类有多种方法,包括一种迭代角色和权限以查看用户拥有的所有权限的方法,例如:

for (Permission permission : role.getPermissions()) {
          permissions.add(new GrantedAuthorityImpl(permission.getName()));
        }
这很难看,但我还没有更好的办法

我使用它的方式是:

if(loggedInUserHasAnyOfThesePermissions("PERMISSION_READ,PERMISSION_EDIT")){
    //do stuff
}
MyUser loggedInUser = myUserDAO.getByUsername(principal.getName());
MyUserDetails loggedInUserUD = new MyUserDetails(loggedInUser);
if (loggedInUserUD.hasAnyPermission("perm1, perm2")){
//do stuff
}

也许吧,但我不知道你在说什么/建议什么。我该怎么做呢?谢谢。@Ryan我猜在其他论坛上也有人问过一个问题,ExpressionUtils是否可以用来优雅地做同样的事情。它具有evaluateAsBoolean方法,该方法接受表达式并返回布尔值。它在Spring类中使用,但我想知道我们是否可以在应用程序类中使用类似的方法。也许可以,但我不知道你在说什么/建议什么。我该怎么做呢?谢谢。@Ryan我猜在其他论坛上也有人问过一个问题,ExpressionUtils是否可以用来优雅地做同样的事情。它具有evaluateAsBoolean方法,该方法接受表达式并返回布尔值。它在Spring类中使用,但我想知道我们是否可以在应用程序类中使用类似的方法。