2010-03-26 45 views
1

我只是試圖以允許,如果他們進行身份驗證的方法的用戶訪問,但沒有我這樣做似乎工作。有沒有辦法檢查用戶是否已經通過身份驗證?即使通過身份驗證,以下內容仍然會拒絕用戶...是否有經過身份驗證的用戶的內置角色?IS_AUTHENTICATED_FULLY的Spring security @notation?

@RequestMapping("/secure") 
@PreAuthorize("hasRole('IS_AUTHENTICATED_FULLY')") 
public String secure(ModelMap map){ 
    return("secure"); 
} 

回答

1

hasRole('ROLE_USER')是任何經過身份驗證的用戶的傳統名稱。您通常會使用ROLE_ANONYMOUS作爲您不在乎該人是否已通過身份驗證的部分。

(後來又增加:)

我想你會需要實現自定義AccessDecisionVoter將始終投票ACCESS_GRANTED每當參數認證isAuthenticated()true,並且CONFIG_ATTRIBUTEROLE_USER或相似。

有關forum discussion的更多討論,請詳細介紹一下web.xml和其他配置。

+0

我使用的是默認的LDAP身份驗證提供者沒有任何角色映射。當用戶通過身份驗證時,我可以在日誌中看到:「[DEBUG,DefaultLdapAuthoritiesPopulator]來自搜索的角色:[]」是否有一種方法可以簡單地爲任何經過身份驗證的用戶設置角色並搜索ldap目錄? – wuntee 2010-03-27 00:08:56

1

在您的自定義UserDetailService實現中,只需將「IS_AUTHENTICATED_FULLY」角色添加到User對象之後再返回。

0

這是我已經結束了使用:

@PreAuthorize("isAuthenticated()") 
10

IS_AUTHENTICATED_FULLY不是一個角色 - 這是一個預先定義的憑證(又名「神奇」的字符串)由AuthenticatedVoter認可,以表明您已經登錄這位選民還支持匿名和記住我登錄。

角色由RoleVoter處理,它識別以「ROLE_」開頭的任何sting(前綴可配置)。因此hasRole('IS_AUTHENTICATED_FULLY')不起作用,因爲它不是一個角色。 @RolesAllowed("IS_AUTHENTICATED_FULLY")不會出於同樣的原因。

當使用Spring表達式語言,正確的表達是:

@PreAuthorize("isAuthenticated()") 

或者,你可以使用:

@Secured("IS_AUTHENTICATED_FULLY") 

,不需要自定義類 - 無論是選民默認情況下啓用。

0

這應該工作:

@PreAuthorize("isFullyAuthenticated()")