当前位置:   article > 正文

Spring MVC拦截器和跨域请求_

一、拦截器简介

SpringMVC的拦截器(Interceptor)也是AOP思想的一种实现方式。它与Servlet的过滤器(Filter)功能类似,主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。
拦截器和过滤器的区别

  1. 拦截器是SpringMVC组件,而过滤器是Servlet组件。
  2. 拦截器不依赖Web容器,过滤器依赖Web容器。
  3. 拦截器只能对控制器请求起作用,而过滤器则可以对所有的请求起作用。
  4. 拦截器可以直接获取IOC容器中的对象,而过滤器就不太方便获取。 

二、拦截器使用

接下来我们使用SpringMVC拦截器,首先使用maven创建SprinMVC的web项目

2.1 控制器方法

  1. package com.example.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.CrossOrigin;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. @Controller
  8. public class MyController1 {
  9. @RequestMapping ("/m1")
  10. public String m1(){
  11. System.out.println("控制器方法");
  12. return "result";
  13. }
  14. }

2.2 编写拦截器类

创建拦截器类,该类实现HandlerInterceptor接口,需要重写三个方法:

  1. preHandle:请求到达Controller前执行的方法,返回值为true通过拦截器,返回值为false被拦截器拦截。
  2. postHandle:跳转到JSP前执行的方法
  3. afterCompletion:跳转到JSP后执行的方法
  1. package com.example.interceptor;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import org.springframework.web.servlet.ModelAndView;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.util.Scanner;
  7. public class MyInterceptor implements HandlerInterceptor {
  8. // 请求到达Controller前执行
  9. @Override
  10. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  11. System.out.print("请求到达Controller前\t");
  12. // 如果return false则无法到达Controller
  13. // 控制台输入决定是否进入Controller
  14. System.out.print("控制台输入决定是否进入Controller: ");
  15. Scanner scanner = new Scanner(System.in);
  16. boolean flag;
  17. flag = scanner.nextBoolean();
  18. return flag;
  19. }
  20. // 跳转JSP前执行,此时可以向Request域添加数据
  21. @Override
  22. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  23. System.out.print("跳转JSP前\t");
  24. /*System.out.print("控制台输入决定是否添加数据: ");
  25. Scanner scanner = new Scanner(System.in);
  26. boolean flag;
  27. flag = scanner.nextBoolean();
  28. if(flag)*/
  29. request.setAttribute("name","HQX");
  30. }
  31. // 跳转JSP后执行,此时已经不能向Request域添加数据
  32. @Override
  33. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  34. System.out.println("跳转到JSP后");
  35. request.setAttribute("age",10);
  36. }
  37. }

 OK,首先我们这里到达控制器前和是否进入控制器还有是否跳转JSP,跳转到JSP后都有对应的提示。 

2.3 JSP页面

result.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>结果</title>
  5. </head>
  6. <body>
  7. <h3>name:${requestScope.name}</h3>
  8. <h3>age:${requestScope.age}</h3>
  9. </body>
  10. </html>

这里把我们控制台输入的name响应到前端页面,但是age注定是没有属性的,因为跳转到JSP后才添加注定是没有意义的。

2.4 配置拦截器

接下来我们需要在SpringMVC核心配置文件中配置拦截器

  1. <!-- 配置拦截器-->
  2. <mvc:interceptors>
  3.   <mvc:interceptor>    
  4.     <!-- 配置拦截器的作用路径-->   
  5.     <mvc:mapping path="/**"/>    
  6.     <!-- 拦截器对象 -->   
  7.     <bean class="com.itbaizhan.interceptor.MyInterceptor"/>
  8.   </mvc:interceptor>
  9. </mvc:interceptors>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/586118
推荐阅读
相关标签
  

闽ICP备14008679号