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

项目结构:


相关文章
|
2月前
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
222 2
|
3月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
124 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
3月前
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
131 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
3月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
169 0
|
3月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
108 0
|
3月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
163 0
|
3月前
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping(&quot;/user/{id}&quot;)` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable(&quot;自定义名&quot;)` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
106 0
|
3月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = &quot;/test&quot;, produces = &quot;application/json; charset=UTF-8&quot;)`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
129 0
|
3月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
121 0
|
3月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
69 0
下一篇
oss创建bucket