我正在尝试开发一个包含一个Parent项目和多个子项目(Sub项目)的应用程序。但我想在他们之间共享身份验证,即如果一个人在与Parent项目的会话期间登录,Sub项目应该能够获取此信息(该用户已经登录)。
有人可以帮我解决一下这个问题吗?
答案 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;
}
}
}
感谢大家花时间解决这个问题。