如果使用springmvc阻止请求,则必须实现一个名为spring handler interceptor的接口。 阻止常规请求不需要特殊处理,但阻止ajax请求需要处理。
1、首先写js,用ajax请求覆盖,如果是ajax请求,做标记,对ajax请求进行注释
$(function () )。
overrideJQeuryAjax (;
);
function overrideJQeuryAjax (
var oriAjax=jQuery.ajax;
//overridejqueryajaxtocheckifsessionisvalid。
juery.Ajax=function(options )。
if (! options.data ) {
options.data=' ';
}
类型of options.data==' string ' )。
options.data=options.data ' _ is Ajax=true ';
} else {
options.data._isAjax=true;
}
var oriSuccess=options.success;
if(typeoforisuccess=='function ' ) }
options.success=function{
if (! 检查会话(result ) }
返回假;
}
Orisuccess(result;
}
}
var oriError=options.error;
类型化函数==' function ' )。
options.error=function{
if (! 检查会话(result ) }
返回假;
}
window.location='error.do ';
}
}
OriAjax(options;
(;
}
函数检查会话(result ) {
type of result.checkuserajaxmsg==' boolean '! result.checkUserAjaxMsg ) {
window.location='loginUI.do ';
返回假;
}
返回真;
}
2、登录时,如果用户没有登录,确认是否是ajax请求,如果是,则用前面的js处理,否则,验证按照普通的请求处理即可
publicbooleanprehandle (httpservletrequestrequest,HttpServletResponse response,Object handler ) )。
throws Exception {
touristtourist=(tourist ) request.getSession ).getattribute (Constance.session.session _ tourist );
if(Tourist!=null(//确定用户是否具有非空权限
返回真;
}else{
阻止处理ajax请求
stringi sajax=request.getparameter (' _ is Ajax );
布尔.密码布尔(is Ajax ) )。
string message=' {' checkuserajaxmsg' : false } ';
response.set content type (application/JSON; charset=UTF-8 ';
response.getOutputStream ().write ) (message.getbytes ) );
}else{
//用户为空,直接返回登录页面
response.sendredirect (log inui.do );
}
返回假;
}
}