您的位置:首页 > 编程语言 > Java开发

spring 登录拦截器

2016-06-08 21:16 357 查看

本Spring登录拦截器可以拦截普通请求和ajax请求,并将原请求跳转至登录页面

1、dispatcher-servlet.xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/center/**"/>
<bean class="com.common.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>


2、LoginInterceptor.java
package com.common.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LoginInterceptor implements HandlerInterceptor {

private static final Logger _LOG = Logger.getLogger(LoginInterceptor.class);

@Override
public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object obj, Exception arg3) throws Exception {
//_LOG.debug("登录拦截器afterCompletion视图渲染完毕时回调.............");
}

@Override
public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object obj, ModelAndView arg3) throws Exception {
//_LOG.debug("登录拦截器postHandle处理器之后处理(但在渲染视图之前).............");
}

@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object obj) throws Exception {
//_LOG.debug("登录拦截器preHandle处理器前预处理.............");
//判断是否登录有效
boolean isLogin = false;
HttpSession session =  req.getSession();

if(session == null){
//没有session
}else{
//有session 获取登录信息
Object protalLogin = session.getAttribute("userId");
if(protalLogin == null || "".equals((String)protalLogin)){
//未登录
}else{
//已登录
isLogin = true;
}
}

if(!isLogin){
_LOG.debug("拦截到未登录的请求....uri="+req.getRequestURI()+" isLogin="+isLogin);
}

if(!isLogin){
//登录失效 或 未登录
String accept = req.getHeader("Accept");

resp.setContentType("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
if (accept!= null && accept.contains(MediaType.APPLICATION_JSON_VALUE)) {
//如果是ajax json的请求,返回401状态码
resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}else{
//如果是url的请求 ,返回script
resp.getWriter().write("<script>window.top.location='"+req.getContextPath()+"/'</script>");
}
resp.getWriter().flush();
}
//如果未登录,返回false表示流程中断
return isLogin;
}

}


3、common.js 代码要放在全局js中,且jquery.js在此方法前已加载
+ function($, undefined) {
//console.log('ajaxSetup ....');
$.ajaxSetup({
cache: false ,
statusCode: {
401: function() {
//console.log(CONTEXT_PATH + "#timeout");
window.top.location = CONTEXT_PATH + "/#timeout";
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
//console.log('ajax error ....'+XMLHttpRequest.status);
if(XMLHttpRequest.status < 500){
return;
}
alert('系统繁忙,请稍候再试');
}
});
} (jQuery);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: