2010-10-13 907 views
4

我使用下面的方法來讓用戶授予權限總是:ROLE_ANONYMOUS?

private void autoLogin(User user, 
      HttpServletRequest request) 
    { 

GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl(
       "ROLE_ADMIN") }; 

     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
       user.getUsername(), user.getPassword(),grantedAuthorities); 

     // generate session if one doesn't exist 
     request.getSession(); 

     token.setDetails(new WebAuthenticationDetails(request)); 
     Authentication authenticatedUser = authenticationManager.authenticate(token); 

     SecurityContextHolder.getContext().setAuthentication(authenticatedUser); 
    } 

用戶通過認證註冊後的綱領性登錄,但總是有ROLE_ANONYMOUS我不知道爲什麼? 有什麼想法?

+0

我認爲這是因爲頁面requries ROLE_ADMIN主體和認證後的用戶角色是匿名的,任何人都知道如何在登錄時使用戶主體爲管理員? – 2010-10-13 12:14:38

回答

8

這種行爲看起來很奇怪。 Javi建議手動將安全上下文保持在會話中,但它應該由Spring Security的SecurityContextPersistenceFilter自動完成。

我可以想象的一個可能的原因是filters = "none"在您的註冊處理頁面的<intercept-url>

filters = "none"禁用指定URL的所有安全過濾器。正如你所看到的,它可能會干擾Spring Security的其他功能。因此,更好的方法是啓用過濾器,但要配置它們以允許所有用戶訪問。您有幾種選擇:

  • 隨着access屬性的舊語法(即不<http use-expressions = "true" ...>):
    • access = "ROLE_ANONYMOUS"允許非認證的用戶訪問,但否認了認證者
    • 要允許訪問您可以編寫的所有用戶access = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"
  • 使用new Spring Expression Language-based syntax<http use-expressions = "true" ...>)您只需寫入e access = "true"允許所有用戶訪問(但其他<intercept-url>也應該使用該語法)。
+0

是的你是對的我在過濾器=「無」在註冊頁面,它和access =「ROLE_ANONYMOUS」有什麼區別? – 2010-10-13 15:29:42

+0

@ sword101:編輯。 – axtavt 2010-10-13 16:15:23

+0

因此,如果我使用訪問=「真」,只有這意味着任何人都可以訪問該頁面,但他們也執行過濾器呢?那麼使用access =「true」和filters =「none」的情況是可行的嗎? – 2010-10-13 17:01:14

0

我有一個類似的問題,我不得不手動設置後進行認證的會話。

request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext()); 

試試吧。

+0

謝謝你,對我來說工作得很好,但我很好奇這行代碼的好處是什麼? – 2010-10-13 13:18:55

+0

正如axtavt所說,它只是在會話中設置安全管理器。我同意應該自動完成,但是當我嘗試時,我必須設置它才能使其工作。 – Javi 2010-10-13 15:12:57