既然你们在我早期进入Play框架的过程中非常有帮助(感谢你的话),这里再说一遍:
我们有一个有效的注册控制器,可以将所有凭据发送到数据库。
但是,我们希望以后可以立即登录。以下是使这项工作的代码:
public static void doRegistration(@Valid User user) {
//registering the user
try{
SecureController.authenticate(user.username, user.password, false, "MainController.index");
}catch(Throwable ex){
MainController.index();
}
这很好用,但它不非常安全,因为它获取服务器的所有凭据。我知道我必须以某种方式编辑我的路径文件,但我看不清楚。
路线档案:
* /account SecureController.login
POST /account/register RegistrationController.doRegistration
GET /account/register SecureController.login
某处应该是动作SecureController.authenticate,但是在POST之后我必须把它放在列中......它不能是/ account / register,因为它失败了......
事先谢谢!
答案 0 :(得分:2)
我不确定我理解你的问题。路径文件只是将URL配置为漂亮URL的一种方法。如果您没有指定它们,那么它将依赖于默认的{controller} / {method}语法。
您遇到的问题是,当您调用另一个控制器时,Play会执行重定向到该控制器的方法,该方法包括将请求发送回浏览器,告知其重定向(这可确保应用程序的状态反映在浏览器中的URL)。因此,重定向需要发送GET请求,并且包含在GET请求中将是您的参数。
答案 1 :(得分:1)
这个想法是控制器从服务类调用authenticate方法。这是一个简单的静态此方法检查用户(如果已启用,具有适当的许可证,无论如何)并在会话中设置一些参数(通过Session对象)。
为了帮助您,您可能希望在用户中创建另一个返回要设置的属性的身份验证方法(例如,在Map中,如果它包含“错误”键,则由于某种原因无法对用户进行身份验证) 。如何执行此步骤可以根据您的要求进行更改。
设置完会话后,您将重定向到您选举的页面(主页,个人资料等)。由于你有共同的@Before方法,这将被执行。此方法应验证会话中的凭据(用户身份验证,许可证类型等)并相应地执行操作。您在Play的安全控制器中有一个示例,但您可以创建自己的。
有了这个,你可以从任何控制器使用服务的验证方法,允许通过多种方法进行验证,并使用公共点来验证会话。