`

Spring mvc 拦截器 配置心得

阅读更多
Spring mvc 拦截器 配置心得

session超过时间自动跳转到登录页面。要求请求的每个url都要进行拦截,当然,js,css这些东西除外。

spring-mvc.xml
<!-- 拦截器配置 -->
	<mvc:interceptors>
	  <!-- session超时 -->
	  <mvc:interceptor>
	    <mvc:mapping path="/*/*"/>
	    <bean class="com.ziyou.platform.interceptor.SessionTimeoutInterceptor">
	      <property name="allowUrls">
	        <list>
	          <!-- 如果请求中包含以下路径,则不进行拦截 -->
	          <value>/login</value>
	          <value>/js</value>
	          <value>/css</value>
	          <value>/image</value>
	          <value>/images</value>
	        </list>
	      </property>
	    </bean>
	  </mvc:interceptor>
	</mvc:interceptors>
	
	<!-- 自定义异常处理,SimpleMappingExceptionResolver这个类可以是个空类,但是要写,方便在java代码里面使用 -->
  	<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	  <property name="exceptionMappings">
	    <props>
	      <prop key="com.ziyou.platform.interceptor.SessionTimeoutException">redirect:/login</prop>
	    </props>
	  </property>
	</bean>

/**
 * 处理session超时的拦截器
 */
public class SessionTimeoutInterceptor  implements HandlerInterceptor{
    
	public String[] allowUrls;//还没发现可以直接配置不拦截的资源,所以在代码里面来排除
	
	public void setAllowUrls(String[] allowUrls) {
		this.allowUrls = allowUrls;
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2) throws Exception {
		String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");  
		System.out.println(requestUrl);
		if(null != allowUrls && allowUrls.length>=1)
			for(String url : allowUrls) {  
				if(requestUrl.contains(url)) {  
					return true;  
				}  
			}
		
		User user = (User) request.getSession().getAttribute("user");
		if(user != null) {  
			return true;  //返回true,则这个方面调用后会接着调用postHandle(),  afterCompletion()
		}else{
			// 未登录  跳转到登录页面
			throw new SessionTimeoutException();//返回到配置文件中定义的路径
		}
	}
	
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
	}

}


另外,你要在controller中设置session的超时时间
request.getSession().setMaxInactiveInterval(20);//20秒
request.getSession().setAttribute("user", user);
分享到:
评论
4 楼 werty45775 2017-01-04  
<property name="allowUrls">  里面配置的url是通过ioc容器注入到拦截器类的吗,菜鸟的提问
3 楼 fly_to_the_winds 2014-08-12  
请问能拦截.jsp结尾的访问吗?
2 楼 yong230 2014-07-30  
楼主能把这个SessionTimeoutException类贴出来吗?
1 楼 daoyongyu 2014-03-04  
楼主写的挺好,谢谢!
我补充一下映射路径的说明:
<mvc:mapping path="/*"/>

这个不是说拦截所有的请求,它代表了根目录下的第一级请求。如请求路径为
http://localhost:8080/Projectnmae/path1,如上配置可以被拦截,
如果请求路径为:http://localhost:8080/Projectnmae/path1/path2呢,如上配置则不能被拦截,需要修改配置为:
<mvc:mapping path="/*/*"/>

依次类推。
如果有两个请求路径如下:
[url]http://localhost:8080/Projectnmae/path1/path2
http://localhost:8080/Projectnmae/path2/path2[/url]
你只想拦截http://localhost:8080/Projectnmae/path1/path2,而不想拦截
http://localhost:8080/Projectnmae/path2/path2,该怎么配置呢?
可以修改配置如下即可:
<mvc:mapping path="/path1/*"/>

另外我的springMVC拦截路径在 web.xml中的配置形式如下:
<servlet-mapping>
		<servlet-name>springMvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

相关推荐

    Spring MVC 拦截器

    Spring MVC 拦截器Spring MVC 拦截器

    spring mvc 拦截器获取请求数据信息.rar

    spring mvc 拦截器获取请求数据信息 解压之后放到项目中 直接运行就可以了 (将流多次运用)

    spring mvc拦截器过滤json中的null值

    spring mvc拦截器,过滤json数据中的null值,将null变成空字符串,内含截图,及jar包

    Spring MVC 拦截器入门例子

    拦截器是Spring MVC中一个十分重要且应用广泛的内容。这里简单敲了一个简单的例子,简单易懂

    精通Spring MVC 4

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...

    详解Spring MVC拦截器实现session控制

    主要介绍了详解Spring MVC拦截器实现session控制,使用session监听,重复登录后,强制之前登录的session过期。有兴趣的可以了解一下。

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    spring MVC配置详解

    spring MVC配置详解

    Spring MVC入门教程

    九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? 十三、如何给spring3 MVC中的Action做JUnit单元测试? ...

    spring mvc案例+配置+原理详解+架包

    适合新手了解认识spring mvc,和搭建spring mvc 框架

    SpringMVCDemo:Spring MVC 框架知识案例

    1.创建第一个 Spring MVC 程序案例 2.Spring MVC @RequestMapping 注解案例 3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 ...14.Spring MVC 拦截器案例 15.Spring MVC 异常处理案例

    Spring MVC 教程 快速入门 深入分析

    九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? 十三、如何给spring3 MVC中的Action做JUnit单元测试? ...

    Spring MVC--13.自定义拦截器

    Spring MVC--自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器

    spring mvc 官方文档

    本文详细介绍spring MVC的原理和开发心得体会。

    spring mvc的配置文件详解

    简单的描述了spring mvc的配置示例,不包括注解方法和示例代码

    spring MVC 配置文档

    一,配置分发器 DispatcherServlet 是Spring MVC 的入口 所有进入Spring Web 的 Request 都经过 DispatcherServlet 需要在 web.xml 中注册 DispatcherServlet &lt;servlet&gt; &lt;servlet-name&gt;dispatherContext...

    Spring MVC+MyBatis开发从入门到项目实战

    包括Spring MVC的背景介绍、架构整体剖析、环境搭建、处理器与映射器的讲解、前端控制器的源码分析、多种视图解析器的介绍、请求映射与参数绑定的介绍、Validation校验与异常处理和拦截器的讲解。第4篇是Spring MVC...

    spring mvc过滤器实现

    spring mvc 过滤器,实现url过滤,权限模块经常用到的,很不错

Global site tag (gtag.js) - Google Analytics