解决方案:SSM+vue+webpack+vue-resource+vue-route路由项目验证session过期跳转至登陆界面
SSM+vue+vue-resource+vue-route路由项目验证session过期跳转至登陆界面解决方案
·
2017.9.16修改一下,因为觉得之前写的有点不准确,仔细想了想需要session验证的只有两处就行了,不是之前说的三处。
登录:登陆页面单独出来,和vue项目分开,login.jsp页面登陆成功后重定向到vue项目的首页路由地址。
到Vue后台项目后有两处会用到session验证处理:通过webpacke+路由的方式构建的后台项目,排除蒙对了静态页面的地址哈,这个自己想办法也好解决。
1、路由之间跳转(vue项目页面之间跳转)
解决:此时的跳转请求没有进入后台,需要在vue-route的全局钩子中跳转到每个路由之前进行session验证请求
router.beforeEach((to, from, next) => {
_vue.$http.post(_vue.getUrl()+"/login/checkSession.do" , {emulateJSON:true})
.then((response)=>{
if(response.body.code=="500"){//session过期
window.location.href= _vue.getUrl()+"/admin/";
}else{
next();
}
}, (response)=> {
this.$Message.error("路由校验session失败!", 3);
});
});
2、每次js异步请求时校验session
解决:自己写个springmvc 的拦截器配置到springmvc的拦截器栈,拦截请求,判断session,过期直接响应状态码不再传递请求
<mvc:interceptors >
<!--过滤ajax .do请求,检查session是否过期-->
<mvc:interceptor>
<mvc:mapping path="/**/*.do"/>
<bean class="com.demon.interceptor.CheckSessionInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors >
main.js中使用vue-resource的拦截器(因为异步请求用的是vue-resource的方法),这个拦截器会在响应到达每个路由之前进行拦截,在此统一判断状态码进行跳转到登录页面
Vue.http.interceptors.push((request, next) => {
next((response) => {
if(response.body.code!=null&&response.body.code=="500"){//登录超时
window.location.href= "localhost:8080/SSM/admin/login.jsp";
}else{
return response;
}
})
})
结束。
更多推荐
已为社区贡献4条内容
所有评论(0)