Java 在Spring3控制器中,如何检查登录用户的权限并有条件地执行某些操作?
在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
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类中使用,但我想知道我们是否可以在应用程序类中使用类似的方法。