gpt4 book ai didi

java - 玩! 2.1-RC2 没有静态引用的 JavaForms validate()

转载 作者:行者123 更新时间:2023-11-29 09:06:57 25 4
gpt4 key购买 nike

我一直在看剧本! 2.1 示例按照 ZenTasks 示例设置基本登录系统。我被卡住的地方是 JavaForms 部分。我想使用通过 Guice DI 提供的身份验证服务实例来验证登录请求。

我正在关注 Play20 Sample .此示例使用静态 authenticate() 方法在表单提交后请求表单验证时运行身份验证。关于如何在非静态范围内执行此验证步骤的任何想法?

注意:我看过Play! Authenticate 插件和 SecureSocial 插件,但是这些项目对于我现在想做的事情来说太过分了。此外,我对允许在 JavaForms 中进行非静态验证的通用解决方案很感兴趣。

编辑:似乎对我在这里的要求有些困惑。我希望找到的是执行由 Play 发送的表单提交的验证步骤的替代方法!框架 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;
}
}

这是一个不错的解决方法,但它仍然依赖于静态注入(inject):(

最佳答案

Play Framework 不提供开箱即用的 Dependency Injection。但是,您可以将它与 Guice 或 Spring 集成。作为一个懒惰的开发人员,您还可以为该服务创建一个 Singleton,或者将其作为一个插件(因为它可能无论如何都需要为应用程序启动做准备)。然后您可以获得对您的插件的引用 -- Play.application().plugin(AuthPlugin.class)

在这种特殊情况下,您可以在验证方法中进行数据库查找,例如

User u = User.find.where().eq("username", username).eq("password`,password).findUnique();
if (u == null)
return "Error.";
else
return null;

所以这并不是关于 Play Framework,而是关于一般的 Java 编程。

关于java - 玩! 2.1-RC2 没有静态引用的 JavaForms validate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com