如何在Parent和Sub项目之间共享身份验证?

时间:2014-06-06 07:50:31

标签: authentication playframework playframework-2.0

我正在尝试开发一个包含一个Parent项目和多个子项目(Sub项目)的应用程序。但我想在他们之间共享身份验证,即如果一个人在与Parent项目的会话期间登录,Sub项目应该能够获取此信息(该用户已经登录)。

有人可以帮我解决一下这个问题吗?

2 个答案:

答案 0 :(得分:0)

我认为你需要一个"核心"项目将保留所有基本功能(身份验证,访问控制,基本实用程序,...)。然后每个子项目都依赖于核心项目,并且通过依赖性,父项目也将了解核心。 This presentation可能有帮助。

答案 1 :(得分:0)

我通过使用play.mvc.Security注释并在其中使用我自己的安全验证器实现来解决了这个问题。下面是子项目的入口控制器中使用的注释:

@Security.Authenticated(SecuredLogin.class)

SecuredLogin.java是检查会话是否有用户的文件,如果是,则执行一些子项目特定功能,例如从Web服务获取用户角色。即。

public class SecuredLogin extends Security.Authenticator {

@Override
public String getLoggedInUsername(Context ctx) {
    if (Controller.session("LOGGEDIN_USERNAME") != null){
        return ctx.session().get("LOGGEDIN_USERID");
    } else {
        String devResidingUser = Controller.session().get("RESIDING_USER");
        UserRoleInformation userRoleInfo ;
        try {
            userRoleInfo = DataController.retrieveUserRoleInformation(devResidingUser);
           Controller.session().put("LOGGEDIN_USERNAME", devResidingUser);
           ctx.session().put("LOGGEDIN_USERROLE", userRoleInfo);
           ctx.session().put("LOGGEDIN_USERID", userRoleInfo.getUserId());
        } catch (Exception e) {
            Controller.session().put("SERVER_ERROR", "TRUE");
            return null;
        }
        ctx.session().put("USERNAME", devResidingUser);
        return devResidingUser;
    }
}
}

感谢大家花时间解决这个问题。