`

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 是一款广泛使用的 Java Web 开发框架,它为构建基于模型-视图-控制器(MVC)架构的应用程序提供了一种简洁而有效的方式。Spring 3.0.5 版本的 Spring MVC 提供了丰富的特性和优化,使得开发者能够快速...

    spring-mvc教程学习总结

    6. **拦截器(Interceptor)**:自定义拦截器可以处理通用的预处理和后处理任务,如权限检查、日志记录等。 7. **异常处理**:使用`@ExceptionHandler`注解可以捕获并处理特定类型的异常,提供统一的错误页面。 8....

    SpringMVC 学习总结

    在实际应用中,SpringMVC 还支持拦截器、异常处理、本地化和主题等功能,可以提供更强大的功能和灵活性。此外,SpringMVC 可以与其他 Spring 模块(如 Spring AOP、Spring Data 等)集成,构建更复杂的业务应用。

    ssh三大框架学习心得

    3. **Struts拦截器**:学习自定义拦截器,实现业务逻辑的扩展。 4. **Spring DI和AOP**:掌握依赖注入的使用,以及AOP的切面、通知、目标对象等概念。 5. **Spring MVC**:了解Spring提供的另一种MVC实现,与Struts...

    spring 参考手册

    Spring的AOP支持使用切面定义拦截器,并在特定的连接点(如方法调用)执行增强操作。 4. **Bean容器**:Spring的Bean容器(ApplicationContext)负责管理应用中的对象,提供对象实例化、初始化、装配以及管理它们...

    ssh框架总结_ ssm心得体会-Java文档类资源

    Struts2是其后续版本,提供了更强大的拦截器(Interceptor)机制和更灵活的配置方式。 **Hibernate框架** 是一个对象关系映射(Object-Relational Mapping,ORM)工具,能够将Java对象与数据库表之间的映射关系自动...

    spring培训的例子

    这可能意味着示例会演示如何在Spring应用中集成Struts3,展示MVC设计模式的应用,以及Struts3的动作(Action)、拦截器(Interceptor)和配置文件的使用。 总结来说,这个“spring培训的例子”涵盖了Spring框架的...

    ssm整合项目+mybatis拦截器.zip

    SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您从零基础开始,逐步掌握SSM的核心技术和最佳实践,助您在Java Web开发领域更上一...

    S2SH框架搭建和心得

    在实际开发中,还需要根据具体需求进行更复杂的配置,例如添加自定义拦截器、配置数据源、事务管理等。同时,不断实践和学习,深入理解这三个框架的原理和协同工作方式,才能更好地利用S2SH框架开发出高效、稳定的...

    SSH项目源码及心得体会

    它提供了强大的Action类,用于定义业务逻辑,以及Interceptor拦截器,可以灵活地添加额外的功能,如权限验证、日志记录等。 Spring框架则是企业级应用的核心,它负责管理对象的生命周期和依赖关系,实现了IoC...

    SSH整合心得01

    另一种方法是使用Hibernate插件(`struts2-hibernate-plugin.jar`),它提供了一些预定义的拦截器和结果类型,简化了数据库操作。 6. **测试与调试**:编写测试用例,验证SSH整合是否成功。确保Action能够正确地...

    struts2学习心得

    6. **Action调用与结果返回**:在Struts2中,Action的调用通过配置文件中的拦截器链实现,拦截器可以执行预处理和后处理操作。Action的返回结果可以通过配置不同的结果类型(如dispatcher、redirect、chain等)来...

    张冰老师的SSH2整合心得

    8. **Struts2配置**:在Struts2的配置文件(如`struts.xml`)中,定义Action、结果类型和拦截器栈。这将指定用户请求如何映射到Action,以及Action执行后如何返回结果。 9. **整合测试**:完成配置后,启动服务器,...

    springmvc学习笔记-前端控制器、上传、异常、开发心得小结等.zip

    - **拦截器**:自定义拦截器可以实现登录检查、权限控制等功能,提高代码复用性。 5. **实战经验** 开发过程中,我们可能会遇到各种问题,如性能优化、安全性考虑、缓存策略等。例如,为了提高性能,可以使用缓存...

    java项目03

    2. **AOP**:允许开发者定义方法拦截器,实现非功能性需求,如日志、事务管理等。 3. **Spring MVC**:提供了一种组织Web应用的结构,将业务逻辑、视图和控制器分离。 4. **数据访问**:支持JDBC、ORM(对象关系映射...

    自己在公司实习做的项目struts2 希望对你有所帮助

    Struts2作为MVC框架,其核心组件包括Action类、配置文件(struts.xml)、拦截器(Interceptor)等。Action类是业务逻辑的载体,它接收来自控制器的请求,执行相应的操作,并返回一个结果。配置文件用于定义Action与...

    SSH整合流程(个人总结,仅供参考)

    10. **部署描述符**:在web.xml中配置Struts2的拦截器和过滤器,确保请求能够被Struts2正确处理。 11. **文件位置**:最后,将applicationContext.xml移动到WEB-INF目录下,这是标准的放置位置,以保护配置文件不被...

    ssh架构个人总结.doc

    在web应用中,我们通常会配置一个`ContextLoaderListener`监听器,以启动Spring的WebApplicationContext,并加载配置文件。如果Spring的配置文件不在默认位置或使用非默认名称,我们需要通过`context-param`来指定...

    SSM框架只是总结以及思维导图

    3. **SpringMVC配置**:配置DispatcherServlet、视图解析器、拦截器等,定义请求映射和处理器。 4. **MyBatis配置**:创建MyBatis的配置文件,包括数据源、SqlSessionFactory、Mapper接口和Mapper XML文件。 5. **...

Global site tag (gtag.js) - Google Analytics