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);
相关文章推荐
- eclipse错误: 找不到或无法加载主类 Test
- ActiveMQ安装配置及实例
- Java并发编程-Executor框架之CompletionService
- java—异常处理机制
- Java 中的线程管理概念梳理
- Eclipse快捷键
- eclipse的优化 gc.log
- Java_JDK_HashMap
- 2015-2016-2《Java程序设计》团队博客4
- 又有人问我Java中Scanner中next()和nextLine()区别了
- java-数组判断为空问题
- 集合01
- 跟王老师学反射(二):Java类的加载、连接和初始化
- 浅析Java注解
- Spring如何配置数据库查询缓存/对象缓存EHCache
- [javaSE] 多线程(守护线程)
- LinkedList源码剖析(JDK6)
- 第二章 JAVA变量类型及语句
- Spring AOP 由浅入深
- JavaSe:ThreadLocal