Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重定向到登录页面时如何保持flash_Java_Playframework - Fatal编程技术网

Java 重定向到登录页面时如何保持flash

Java 重定向到登录页面时如何保持flash,java,playframework,Java,Playframework,我正在实施一种电子邮件机制: 用户收到带有验证链接的电子邮件 单击它,找到一个控制器,该控制器在用户模型上保存“已验证”位,然后将他重定向到另一个页面 在重定向之前,最后一页会将一条消息放入flash对象中。。。稍后通过javascript在用户最终到达的任何页面中显示。邮件上写着“感谢您验证您的电子邮件” 目标页面具有@With(Secure.class),因此如果用户未通过身份验证,我将访问Secure.login()方法 现在,在这一点上,我发现flash不包含重定向之前我刚刚放在那里的消

我正在实施一种电子邮件机制:

  • 用户收到带有验证链接的电子邮件
  • 单击它,找到一个控制器,该控制器在用户模型上保存“已验证”位,然后将他重定向到另一个页面
  • 在重定向之前,最后一页会将一条消息放入
    flash
    对象中。。。稍后通过javascript在用户最终到达的任何页面中显示。邮件上写着“感谢您验证您的电子邮件”
  • 目标页面具有@With(Secure.class),因此如果用户未通过身份验证,我将访问Secure.login()方法
  • 现在,在这一点上,我发现
    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()
    after
    if(!session.contains(“username”){
    重定向时唯一幸存的是会话数据;您的flash对象是否存储在会话中?@Viruzzo-flash是在请求之间幸存的播放对象。我正在尝试复制
    Secure
    类,并在
    if之后添加
    flash.keep();
    (!session.contains(“用户名”){