Java 重定向到登录页面时如何保持flash
我正在实施一种电子邮件机制:Java 重定向到登录页面时如何保持flash,java,playframework,Java,Playframework,我正在实施一种电子邮件机制: 用户收到带有验证链接的电子邮件 单击它,找到一个控制器,该控制器在用户模型上保存“已验证”位,然后将他重定向到另一个页面 在重定向之前,最后一页会将一条消息放入flash对象中。。。稍后通过javascript在用户最终到达的任何页面中显示。邮件上写着“感谢您验证您的电子邮件” 目标页面具有@With(Secure.class),因此如果用户未通过身份验证,我将访问Secure.login()方法 现在,在这一点上,我发现flash不包含重定向之前我刚刚放在那里的消
flash
对象中。。。稍后通过javascript在用户最终到达的任何页面中显示。邮件上写着“感谢您验证您的电子邮件”flash
不包含重定向之前我刚刚放在那里的消息。什么是正确的方式来使用flash,从而在这种重定向中幸存下来?这似乎是可行的:
public class OurSecure extends Controller {
@Before(unless={"login", "authenticate", "logout"})
static void checkAccess() throws Throwable {
// Authent
if(!session.contains("username")) {
// __ my modification __ :
flash.keep();
flash.put("url", "GET".equals(request.method) ? request.url : "/");
// seems a good default
login();
}
...
}
这似乎有效:
public class OurSecure extends Controller {
@Before(unless={"login", "authenticate", "logout"})
static void checkAccess() throws Throwable {
// Authent
if(!session.contains("username")) {
// __ my modification __ :
flash.keep();
flash.put("url", "GET".equals(request.method) ? request.url : "/");
// seems a good default
login();
}
...
}
嗯。。。嗯,这是一个稍微不同的用例,但这就是我如何记住当用户被重定向到登录页面时,他想要访问哪个页面的方式,这样我就可以在成功验证后将他重定向回那里。也许会有帮助
@Before(only = "authenticate")
public static void preserveUrl()
{
String url = request.params.get("url");
if(
"authenticate".equals(request.actionMethod) &&
url != null &&
!url.toLowerCase().contains("http") &&
!url.toLowerCase().contains("ftp")
)
{
flash.put("url", url);
}
}
static boolean authenticate(String username, String password) {
if(username == null || password == null)
return false;
String passwordHash = Codec.hexMD5(password.trim());
Member m = Member.findByEmailAddressPasswordHashAndStatus(username, passwordHash, Member.STATUS.ACTIVE);
return m != null;
}
嗯。。。嗯,这是一个稍微不同的用例,但这就是我如何记住当用户被重定向到登录页面时,他想要访问哪个页面的方式,这样我就可以在成功验证后将他重定向回那里。也许会有帮助
@Before(only = "authenticate")
public static void preserveUrl()
{
String url = request.params.get("url");
if(
"authenticate".equals(request.actionMethod) &&
url != null &&
!url.toLowerCase().contains("http") &&
!url.toLowerCase().contains("ftp")
)
{
flash.put("url", url);
}
}
static boolean authenticate(String username, String password) {
if(username == null || password == null)
return false;
String passwordHash = Codec.hexMD5(password.trim());
Member m = Member.findByEmailAddressPasswordHashAndStatus(username, passwordHash, Member.STATUS.ACTIVE);
return m != null;
}
重定向时,唯一幸存的是会话数据;您的flash对象是否存储在会话中?@Viruzzo-flash是在请求之间生存的播放对象。我现在正试图复制
安全类,并添加flash.keep()
afterif(!session.contains(“username”){
重定向时唯一幸存的是会话数据;您的flash对象是否存储在会话中?@Viruzzo-flash是在请求之间幸存的播放对象。我正在尝试复制Secure
类,并在if之后添加flash.keep();
(!session.contains(“用户名”){