拦截后,redirect跳转不成功

对所有请求拦截,未登录的做跳转到login.html页,使用redirect,但是返回了login.html,但是没有跳转。谷歌浏览器

@Override
	public void intercept(Invocation inv) {
           //排除拦截,避免死循环
            boolean flag = true;
            for(int i = 0 ; i < interceptList.length ; i++){
                if(inv.getActionKey().equals(interceptList[i])) flag = false;
            }
            if(flag){
            	Controller controller = inv.getController();
            	String u_token= controller.getCookie("token");
            	System.out.println(u_token);
        		if(u_token==null||"".equals(u_token)){
    				    controller.redirect("../login.html");
        			    return;
        		}else{
        			Map<String, Object> token = TokenUtil.parserJavaWebToken(u_token);
       			 	System.out.println(token);
    	   			System.out.println("Before invoking " + inv.getActionKey());
    	     		inv.invoke();
    	            System.out.println("After invoking " + inv.getActionKey());
        		}
        		
            }else{
            	inv.invoke();
            }
	
       }

解决方案:

在服务端添加请求头信息,包含是否重定向,重定向路径等

在前端全局js中使用ajax的complete函数(在ajax请求完成后调用)做处理,重定向

if(u_token==null||"".equals(u_token)){
					controller.getResponse().setHeader("redirect", "true");
					controller.getResponse().setHeader("loginPath", "/login.html");
					controller.renderNull();
    			    return;
    		}
/**
 * ajax默认设置
 * 包括默认提交方式为POST,
 * 判断后台是否是重定向
 */
$.ajaxSetup( {    
    //设置ajax请求结束后的执行动作    
    complete : function(XMLHttpRequest, textStatus) {  
        // 通过XMLHttpRequest取得响应头,redirect
        var redirect = XMLHttpRequest.getResponseHeader("redirect");//若HEADER中含有redirect说明后端想重定向  
        if (redirect == "true") {
            var win = window;    
            while (win != win.top){  
                win = win.top;  
            }
            //将后端重定向的地址取出来,使用win.location.href去实现重定向的要求  
            myAlert("身份失效,请重新登录",6);
			win.location.href= XMLHttpRequest.getResponseHeader("loginPath");
        }
    },
    type:'POST'
});


评论区

蜗牛看世界

2018-08-02 17:38

好吧,明白了,重定向不能和ajax同流合污

热门反馈

扫码入社