玩2.1-RC2无静态引用的JavaForms validate()
我已经看完这出戏了!2.1按照ZenTasks示例设置基本登录系统的示例。我陷入困境的是JavaForms部分。我想使用通过guicedi提供的auth服务的实例来验证登录请求 我跟在后面。此示例使用静态玩2.1-RC2无静态引用的JavaForms validate(),java,playframework-2.0,playframework-2.1,Java,Playframework 2.0,Playframework 2.1,我已经看完这出戏了!2.1按照ZenTasks示例设置基本登录系统的示例。我陷入困境的是JavaForms部分。我想使用通过guicedi提供的auth服务的实例来验证登录请求 我跟在后面。此示例使用静态authenticate()方法在表单提交后请求表单验证时运行身份验证。关于如何在非静态范围内执行此验证步骤,您有何想法 注:我已经看过这出戏了!验证插件以及SecureSocial插件,但是这些项目对于我现在想要做的事情来说是过度的。另外,我对允许JavaForms中的非静态验证的通用解决方案
authenticate()
方法在表单提交后请求表单验证时运行身份验证。关于如何在非静态范围内执行此验证步骤,您有何想法
注:我已经看过这出戏了!验证插件以及SecureSocial插件,但是这些项目对于我现在想要做的事情来说是过度的。另外,我对允许JavaForms中的非静态验证的通用解决方案感兴趣
编辑:
我在这里的要求似乎有些混乱。我希望找到一种替代方法来执行由剧本发送的表单提交的验证步骤!framework Form.Form()生成表单。目前,它要求对不是通过DI框架创建的POJO实例调用validate()方法。这导致访问授权服务等需要静态引用
编辑2:
我目前使用的解决方案是:
public static class AuthServiceFormReference {
@Inject
public static Provider<AuthService> authService;
}
// In my auth module configure()
//...
requestStaticInjection(AuthController.AuthServiceFormReference.class);
//...
public static class Login {
@Required
public String email;
@Required
public String password;
public String validate(){
if(AuthServiceFormReference.authService.get().authenticateAdmin(email, password) == null) {
return "Invalid user or password";
}
return null;
}
}
公共静态类AuthServiceFormReference{
@注入
公共静态提供者身份验证服务;
}
//在我的身份验证模块中配置()
//...
requestStaticInjection(AuthController.AuthServiceFormReference.class);
//...
公共静态类登录{
@必需的
公共字符串电子邮件;
@必需的
公共字符串密码;
公共字符串验证(){
if(AuthServiceFormReference.authService.get().authenticateAdmin(电子邮件,密码)==null){
返回“无效用户或密码”;
}
返回null;
}
}
这是一个不错的解决方法,但它仍然依赖于静态注入:(Play Framework不提供现成的依赖注入。但是,您可以将其与Guice或Spring集成。作为一个懒惰的开发人员,您还可以为服务创建一个
单例
,或者将其作为插件(因为它可能需要为应用程序启动做准备工作)。然后您可以获得对插件的引用--Play.application().plugin(AuthPlugin.class)
在这种特殊情况下,您可以在validate方法中执行数据库查找,例如
User u = User.find.where().eq("username", username).eq("password`,password).findUnique();
if (u == null)
return "Error.";
else
return null;
所以这并不是关于Play Framework的,而是关于Java编程的。假设您可以像在任何其他Java程序中一样:
@Configurable
public class MyModel {
@Autowired
transient MyService myService;
public String validate() { ... }
}
@Configurable
注释使类能够进行依赖项注入。临时限定符确保字段不会被提取为要保存到数据库中的字段