2015-04-03 101 views
0

我一直在玩身份驗證。我希望能夠在某些頁面上爲登錄用戶提供一些額外的功能。問題是如果我不使用控制器類的@Security.Authenticated(Secured.class)註釋,我無法從會話中獲取用戶名,因此我無法檢查是否用戶是否登錄。Play Framework 2 Java可選身份驗證

我應該怎麼辦?是否應該確保所有頁面都已通過身份驗證,然後是否有某種來賓登錄會自動用於其他會話,或者有辦法檢查用戶是否已登錄,即使在沒有註冊的課程中也是如此。

如果有人能指出我的方向是正確的,如果有一個教程可以做到這一點或只是一些指導,那將是非常棒的。

+0

是你的問題,你必須檢查會議上,一些功能(用戶登錄後的操作),而忽略了一些功能(動作之前用戶登錄)? – silentprogrammer 2015-04-03 08:35:33

+0

是的,我希望能夠讓所有未經授權的用戶看到頁面和列表項目等,但無法在頁面上發表評論。 – DavidA 2015-04-03 09:54:05

+1

所以你可以在功能級別而不是類級別使用'@ Security'或者你有'@ With'也有什麼問題。 – silentprogrammer 2015-04-03 09:58:51

回答

0

你應該做兩兩件事:

  1. 防止未經授權的用戶在你的模板查看功能:

    @Security.Authenticated(Secured.class) 
    public static Result submitComment() { 
        ... 
    } 
    
  2. @if(session().containsKey(Secured.SESSION_AUTH_KEY)) { /* Your comment form */ } 
    
  3. 無法再訪問你的行動未授權的用戶

有了:

public class Secured extends Security.Authenticator { 

    public static final String SESSION_AUTH_KEY = "email"; 

    public String getUsername(Http.Context context) { 
     return context.session().get(SESSION_AUTH_KEY); 
    } 

    public Result onUnauthorized(Http.Context context) { 
     ... 
    } 
}