spring mvc xml配置拦截器

简介:

spring mvc 有两种配置:(1)注解;(2)基于xml(schema)。

公司要求使用xml方式的,其实在我看来注解更方便;

如何使用xml配置spring mvc的拦截器呢?

场景:比如用户通过浏览器访问我的网站时,我需要判断用户是否已经登录过,若登录过,则允许访问,否则自动跳转到登陆页面。

spring mvc中拦截器类需要继承HandlerInterceptorAdapter 

代码如下:

Java代码   收藏代码
  1. package com.yj.mvc.controler.interceptor;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.springframework.web.servlet.ModelAndView;  
  7. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;  
  8.   
  9. public class HandlerInterceptor1 extends HandlerInterceptorAdapter {  
  10.     @Override    
  11.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {    
  12.         System.out.println("===========HandlerInterceptor1 preHandle");    
  13.         return true;    
  14.     }    
  15.     @Override    
  16.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {    
  17.         System.out.println("===========HandlerInterceptor1 postHandle");    
  18.     }    
  19.     @Override    
  20.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {    
  21.         System.out.println("===========HandlerInterceptor1 afterCompletion");    
  22.     }    
  23. }  

 比较重要的方法时preHandle,如果返回false,就请求不会往下传递,就会拒绝请求。所以该方法可用于进行访问控制

控制器代码如下:

Java代码   收藏代码
  1. package com.yj.mvc.controler;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.web.servlet.ModelAndView;  
  10. import org.springframework.web.servlet.mvc.Controller;  
  11. import org.springframework.web.servlet.view.json.MappingJacksonJsonView;  
  12.   
  13. public class DemoController implements Controller {  
  14.   
  15.     private String name;  
  16.     private String age;  
  17.     public ModelAndView handleRequest(HttpServletRequest request,  
  18.             HttpServletResponse response) throws Exception {  
  19.         System.out.println("request.getRequestURL():"+request.getRequestURL());  
  20.         System.out.println("request.getServletPath():"+request.getServletPath());  
  21.   
  22.         Map root = new HashMap();   
  23.         ModelAndView modelAndView =new ModelAndView(new MappingJacksonJsonView(), root);   
  24.         return modelAndView;  
  25.     }  
  26.     public String getName() {  
  27.         return name;  
  28.     }  
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.     public String getAge() {  
  33.         return age;  
  34.     }  
  35.     public void setAge(String age) {  
  36.         this.age = age;  
  37.     }  
  38.   
  39. }  

 

spring mvc配置文件:springmvc-servlet.xml

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.             http://www.springframework.org/schema/context  
  9.            http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10.            http://www.springframework.org/schema/aop  
  11.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  12.            http://www.springframework.org/schema/tx   
  13.            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  14.            http://www.springframework.org/schema/mvc   
  15.            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  
  16.   
  17.   
  18.     <!-- HandlerAdapter -->  
  19.     <bean  
  20.         class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />  
  21.     <!-- ViewResolver -->  
  22.     <bean  
  23.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  24.   
  25.         <property name="viewClass"  
  26.             value="org.springframework.web.servlet.view.JstlView" />  
  27.         <property name="viewNames">  
  28.             <list>  
  29.                 <value>org.springframework.web.servlet.view.json.MappingJacksonJsonView  
  30.                 </value>  
  31.             </list>  
  32.         </property>  
  33.     </bean>  
  34.   
  35.   
  36.   
  37.   
  38.     <mvc:resources mapping="/resource/**" location="/WEB-INF/resource/" />  
  39.   
  40.   
  41. </beans>  

 

web.xml配置如下 :

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  5.     version="3.0">  
  6.     <display-name></display-name>  
  7.     <context-param>  
  8.         <param-name>contextConfigLocation</param-name>  
  9.         <param-value>  
  10.             classpath:beans.xml  
  11.           
  12.         </param-value>  
  13.     </context-param>  
  14.     <listener>  
  15.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  16.     </listener>  
  17.       
  18.   
  19.     <servlet>  
  20.         <servlet-name>springmvc</servlet-name>  
  21.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  22.         <load-on-startup>1</load-on-startup>  
  23.     </servlet>  
  24.     <servlet-mapping>  
  25.         <servlet-name>springmvc</servlet-name>  
  26.         <url-pattern>/</url-pattern>  
  27.     </servlet-mapping>  
  28.   
  29.   
  30.   
  31.   
  32. </web-app>  

 

beans.xml内容:

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  7.             http://www.springframework.org/schema/context  
  8.            http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  9.            http://www.springframework.org/schema/aop  
  10.            http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  11.            http://www.springframework.org/schema/tx   
  12.            http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"  
  13.     default-lazy-init="false">  
  14.   
  15.     <!-- url映射列表,所有控制层Controller的访问路径在这里定义 -->  
  16.     <bean id="urlMapping"  
  17.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  18.         <property name="mappings">  
  19.             <props>  
  20.                 <prop key="demo.action">demoController</prop>  
  21.                 <prop key="demo222.action">demoController</prop>  
  22.             </props>  
  23.               
  24.         </property>  
  25.         <property name="interceptors">  
  26.             <list>  
  27.                 <ref bean="handlerInterceptor2" />  
  28.             </list>  
  29.         </property>  
  30.     </bean>  
  31.     <!-- 控制器的父类 -->  
  32.     <bean id="demoController" class="com.yj.mvc.controler.DemoController">  
  33.     </bean>  
  34.   
  35.   
  36.   
  37.   
  38.     <!-- 系统业务参数 -->  
  39.     <!-- <bean name="businessParamViewConf" class="com.tdr.otp.ats.conf.BusinessParamViewConf" -->  
  40.     <!-- parent="baseController" > -->  
  41.     <!-- <property name="businessParamViewService"> -->  
  42.     <!-- <ref bean="businessParamViewService" /> -->  
  43.     <!-- </property> -->  
  44.     <!-- </bean> -->  
  45.     <bean id="handlerInterceptor2" class="com.yj.mvc.controler.interceptor.HandlerInterceptor1" />  
  46. </beans>  

 

 

启动服务器后,在浏览器中访问:http://localhost:8080/springmvc_xml/demo.action

后台打印:

===========HandlerInterceptor1 preHandle

request.getRequestURL():http://localhost:8080/springmvc_xml/demo.action

request.getServletPath():/demo.action

===========HandlerInterceptor1 postHandle

===========HandlerInterceptor1 afterCompletion

项目使用maven构建

IDE:eclipse

项目结构:


相关文章
|
4月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
4月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
4月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1713 0
|
6月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1092 0
|
3月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
3月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
4月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
723 5
|
4月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
240 0
探索Spring Boot的@Conditional注解的上下文配置
|
5月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1158 10
|
6月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
454 0