登录超时 拦截器里无法跳转到登录页面

romeo2015 发布于 2015/03/02 16:12
阅读 2K+
收藏 0

@JFinal 你好,想跟你请教个问题:

我想使用拦截器实现用户登录超时后,进行操作时跳转到登录页面,debug后发现已经进入了我想要的interceptor,但是controller.redirect("/login.jsp");这句没有起作用,页面任然停留在正在操作的页面里。

public class LoginInterceptor implements Interceptor {

	@Override
	public void intercept(ActionInvocation ai) {
		Controller controller = ai.getController();
	    String loginUser = controller.getSessionAttr("username");
	    if (loginUser != null && !loginUser.equals("")){
	    	ai.invoke();
	    }else{
	    	controller.removeSessionAttr("username"); 
	    	controller.redirect("/login.jsp"); //debug下能运行到这一步 但是不跳转
	    	return;
	    }
	}
}



加载中
0
JFinal
JFinal

注意四点:

1:请求不能是 ajax 请求

2:调试一下,看是否执行了 controller.redirect("/login.jsp") 这行代码 

3:看控制台的 JFinal action report,看是否有其它拦截器干预了请求流程

4:最重要一点,看浏览器是否在第一次请求过后又发出了一个 302 请求

xiayangzhi
xiayangzhi
回复 @romeo2015 : ajax请求的话 得到成功的消息 直接在页面重定向就行了
romeo2015
romeo2015
回复 @JFinal : 回答的很详细,成功实现了,谢谢
JFinal
JFinal
回复 @romeo2015 : 如果是 ajax,只需要 在 jfinal 这端使用renderJson("redirectUrl", "/login.jsp"); 然后 ajax 那端得到 redirectUrl 的返回值 "/login.jsp" 以后,通过 js 做个跳转即可: location.href = redirectUrl;
romeo2015
romeo2015
十分感谢,找到原因了,是ajax请求造成的。顺便想问一下,如果是ajax请求的情况下,有什么好的方法实现页面跳转吗
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部