簡體   English   中英

在Spring 3控制器中,如何檢查登錄用戶的權限並有條件地執行某些操作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM