SSM配置登录拦截器
1.xml配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/other/**"/>
<mvc:exclude-mapping path="/other/login/login.do" />
<bean class="com.test.other.interceptor.SysInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
2.拦截器
public class SysInterceptor extends HandlerInterceptorAdapter {
private Logger logger = Logger.getLogger(SysInterceptor.class);
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{
logger.debug("SysInterceptor preHandle ==========================");
HttpSession session = request.getSession();
User user = (User)session.getAttribute(Constants.USER_SESSION);
if(null != user){
return true;
}else{
Map<String,Object> result = new HashMap<String, Object>();
result.put("code",Constants.FAIL);
result.put("msg","身份信息已失效,请先重新登录!");
jsonOut(result);
return false;
}
}
private void jsonOut(Object object) {
try{
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(object);
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json;charset=utf-8");
response.getWriter().print(jsonString);
}catch (Exception e) {
e.printStackTrace();
}
}
}
2.1方法解析
afterCompletion
整个请求处理完毕回调方法,即在视图渲染完毕时回调。
postHandle
在处理程序执行之后执行.也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行,
preHandle
在实际处理程序执行之前执行. 该方法将在Controller处理之前进行调用.返回true, 请求继续往下执行, 如果返回false, DispatcherServlet会假定请求已被拦截器处理完成了(不再继续执行其他逻辑).