Java 向PlayFramework 1.2.x登录页面添加验证码
我的任务是维护一个使用PlayFramework 1.2.x编写的小型应用程序。需要完成的一项工作是:向登录页面添加验证码。这显然比人们想象的要困难,因为登录页面是由安全模块半自动处理的 处理普通HTTP表单时,PlayFramework将表单变量作为参数传递给控制器方法。使用标准的安全模块,登录表单只包含用户名和密码,并将它们传递给authenticate方法 现在,我可以创建一个包含captcha的自定义登录表单,还可以覆盖安全模块中的authenticate方法。问题在于:我无法更改authenticate方法的参数以包含captcha代码,否则它将不再覆盖超类中的方法(并且该方法将永远不会被调用) 这是一个简单的登录表单,其验证码改编自“yabe”示例:Java 向PlayFramework 1.2.x登录页面添加验证码,java,login,playframework,captcha,playframework-1.x,Java,Login,Playframework,Captcha,Playframework 1.x,我的任务是维护一个使用PlayFramework 1.2.x编写的小型应用程序。需要完成的一项工作是:向登录页面添加验证码。这显然比人们想象的要困难,因为登录页面是由安全模块半自动处理的 处理普通HTTP表单时,PlayFramework将表单变量作为参数传递给控制器方法。使用标准的安全模块,登录表单只包含用户名和密码,并将它们传递给authenticate方法 现在,我可以创建一个包含captcha的自定义登录表单,还可以覆盖安全模块中的authenticate方法。问题在于:我无法更改aut
问题:如何从表单到authenticate方法获取值“code”和“randomID”?是否有其他方法从表单中访问值?您正在玩游戏!控制器,因此您可以访问对象
request.params
,从中可以获取参数,如request.params.get(“code”)
中所述
#{extends 'main.html' /} #{set title:'Login' /}
#{form @authenticate()}
<p>
<label for="username">User name: </label> <input type="text"
name="username" id="username" maxlength="30"
value="${params.username}" />
</p>
<p>
<label for="password">Password: </label> <input type="password"
name="password" id="password" maxlength="30" " />
</p>
<p>
<label for="code">Please type the code below: </label> <img
src="@{Captcha.captcha(randomID)}" /> <br /> <input type="text"
name="code" id="code" size="18" value="" /> <input type="hidden"
name="randomID" value="${randomID}" />
</p>
<p>
<input type="submit" id="signin" value="Log in" />
</p>
#{/form}
package controllers;
import play.cache.Cache;
import play.data.validation.Required;
import models.*;
public class Security extends Secure.Security {
static boolean authenticate(String username, String password) {
boolean auth = false;
if (code.equals(Cache.get(randomID))) {
auth = (User.connect(username, password) != null);
}
return auth;
}
}