重定向页面的问题与解决方法

11 篇文章 0 订阅
3 篇文章 0 订阅

需求是:登陆过期跳转到登录首页
最开始,我想到的是springMVC的拦截器类继承 HandlerInterceptorAdapter类,然后重写下面的几个方法

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }

    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    }

或则实现HandlerInterceptor接口重写下面三个方法

   boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;

    void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;

    void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;

然后在自定义拦截器类中的preHandle方法中,写拦截逻辑。

public class LoginInterceptor extends HandlerInterceptorAdapter{

	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
			if(登录用户为null){
				// 重定向到另一个页面
				response.sendRedirect("http://www.baidu.com");
				// 停止请求继续执行
				return false;
			} else {
				...
			}
			// 请求继续向下执行
	        return true;
	    }
	....
}

最后再spring-mvc.xml中配置

<mvc:interceptors>
		<!-- 对未登录用户的操作进行拦截 -->
		<mvc:interceptor>
			<!--  对登录操作进行拦截 -->
			<mvc:mapping path="/**"/>
			<bean class="com.mf.ssm.core.aj.util.LoginInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

这里,我发现一个问题,一次有多个请求过来时,重定向会报错。通常,一个html页面中,会调用多个ajax方法,可能是表格赋值,也可能是下拉选赋值…

  • 所以能不能使用拦截器拦截html页面呢?这样我们只处理一个请求,就不会发生连续重定向错误了。 目前没找到这种的解决方法。

最后,我花了太多时间,也避免了连续重定向,虽然响应状态码是200(说明是成功的),但是页面还是无法重定向到指定的页面。最后,在网上找到了问题所在:ajax的请求,是不能在后端再次重定向的,卧槽,无情。后来发现了解决方法:ajax请求重定向

但是,我不想这么做(因为,我以经浪费了大量时间)。这样每个ajax返回数据成功后,都要去判断后端是否需要重定向,如果需要,则还要去取出重定向地址,然后使用window.location.href跳转重定向的地址。

最后,想到一种相对简单的方法:
我可以在页面执行前判断cooke有没有值,进而确定有无登录用户。

// 返回检查cookies中有没有用户,没有就重定向到登录页面
	function getCookie(NameOfCookie) {
		if (document.cookie.length > 0) {
			begin = document.cookie.indexOf(NameOfCookie + "=");
			if (begin !== -1) {
				begin += NameOfCookie.length + 1;
				end = document.cookie.indexOf(";", begin);
				if (end === -1) end = document.cookie.length;
				return unescape(document.cookie.substring(begin, end));
			}
		}
		return null;
	}
	console.log(getCookie('_sessionYongChuanId'))
	// cookie的名称
	if(getCookie('_sessionYongChuanId')==null){
		// 跳转到登录页面
		window.location.href="http://192.168.1.185:8083"
	}

新建一个js文件,将上面代码赋值进去,修改_sessionYongChuanId,为自己的cookie 名字,然后其它页面都引用这个js即可解决问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值