版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaozaq/article/details/84333094
后台管理系统一般都会校验权限,当用户未登录,或者登录后长时间未操作导致session失效,权限校验会导致用户重定向到登录页面。此时希望用户在登录后返回原来的页面。
具体实现方法如下:
1.权限校验重定向到登录页面时,在其重定向的url后添加一个参数保留原来页面的url。
可以自己随意定义,这里我定义的是toUrl。
代码示例:
//System.out.println("未登录,未通过验证! ");
//没有权限则直接重定向到登录页面
String toUrl = request.getRequestURL().append("?").append(request.getQueryString()).toString();
try {
toUrl = URLEncoder.encode(toUrl,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
inv.getController().redirect("/xpl/admin/login"+"?toUrl=" + toUrl);
2.在登录页面使用ajax登录。登录成功后,获取url参数toUrl。然后对其进行解码。
$.post("/xpl/admin/login/userLogin",obj.field,function(data){
if(data.code == 0){
//登入成功的提示与跳转
layer.msg('登入成功', {
offset: '15px'
,icon: 1
,time: 500
}, function(){
var toUrl = getQueryString("toUrl");
toUrl = toUrl || '/xpl/admin/main'; //如果没有toUrl参数,则默认进入后台主页面
toUrl = decodeURIComponent(toUrl);
location.href = toUrl;
});
}else{
layer.msg(data.msg);
}
});
打完收工。
ps:
1.getQueryString(“toUrl”)是获取url参数。
具体实现:
/***
* 获取url参数
*/
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return decodeURI(r[2]);
return null;
}
2.url编码与解码:
java中使用URLEncoder.encode(toUrl,“UTF-8”)编码,对应js中使用decodeURIComponent(toUrl)。
这样才能保证url中问号后面如果有多个参数不会丢失。