[英]In a Spring 3 controller, how can I check the permissions of the logged-in user and do certain actions conditionally?
在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
}
我已經搜索了幾個小時,卻沒有找到一種更簡潔,更優雅的方法,但是必須存在。 謝謝你的幫助!
PS我已經熟悉如何在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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.