2015-04-03 80 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) { 
     ... 
    } 
}