SSM框架学习-拦截器

这篇具有很好参考价值的文章主要介绍了SSM框架学习-拦截器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简介

ssm拦截器配置,ssm,学习,servlet,java,spring,mvc
ssm拦截器配置,ssm,学习,servlet,java,spring,mvc

在Spring框架中,拦截器是一种很重要的组件,它们允许在请求到达控制器之前或之后执行一些代码。拦截器在请求处理的特定点进行拦截,然后通过逻辑来决定是否将控制器的处理传递给下一个处理程序。
在Spring中,拦截器是由实现了HandlerInterceptor接口的类实现的。HandlerInterceptor接口暴露了三种拦截方法:preHandle(在请求处理之前被调用)、postHandle(在请求处理之后调用,渲染视图之前)和afterCompletion(在完成请求后执行,无论发生了什么)。

这里就和之前的过滤器Filter很相似,但是也有不同

拦截器和过滤器都可以用于在处理请求和响应过程中进行额外的处理,但它们之间还是有一些重要的区别的。

  1. 拦截器是Spring MVC的一部分,它基于Java反射机制,在请求到达控制器前后拦截并进行额外的处理。过滤器是Servlet规范中的一部分,用于在请求到达servlet之前或之后进行拦截,可以用来修改请求或响应。

  2. 过滤器可以用于处理Servlet规范之外的事物,例如对静态内容进行GZIP压缩等。而拦截器则仅针对请求到达Spring MVC控制器的场景进行处理。

  3. 需要通过代码来将拦截器添加到应用程序中,而过滤器则可以通过修改web.xml文件来添加。

  4. 拦截器只能拦截请求和响应,但过滤器可以拦截请求、响应,甚至是错误处理。

  5. 拦截器和过滤器的拦截范围不同。拦截器只会拦截到已经映射成功的路径,而过滤器则可以拦截到所有的请求。

通常情况下,如果是针对Spring MVC的请求或响应处理,应该使用拦截器,如果需要处理所有的请求和响应,包括静态内容,应该选择过滤器。

2. 入门案例

ssm拦截器配置,ssm,学习,servlet,java,spring,mvc

2.1 第一种

  1. 制作拦截器功能类
  2. 配置拦截器的执行位置
  1. 声明拦截器的bean,实现HanderInterceptor接口,并且要扫描加载bean,拦截器类最好放在controller目录下
@Component
//定义拦截器类,实现HandlerInterceptor接口
//注意当前类必须受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {
    @Override
    //原始方法调用前执行的内容
    //返回值类型可以拦截控制的执行,true放行,false终止
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		System.out.println("preHandle...");
        return true;
    }

    @Override
    //原始方法调用后执行的内容
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    @Override
    //原始方法调用完成后执行的内容
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}
  1. 定义配置类SpringMvcSupport,实现WebMvcConfigurationSupport接口,最后实现addInterceptor方法;

第一个方法是对pages目录下的静态资源放行,避免被SpringMVC拦截;
第二个方法是设置拦截路径("/books","/books/*"),路径可以通过可变参数设置多个;

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
    }

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        //配置拦截器
        registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
    }
}

2.2 第二种

直接将配置拦截器的操作写在SpringMvcConfig中;
实现WebMvcConfigurer接口可以简化开发,但具有一定的侵入性;

@Configuration
@ComponentScan({"com.itheima.controller"})
@EnableWebMvc
//实现WebMvcConfigurer接口可以简化开发,但具有一定的侵入性
public class SpringMvcConfig implements WebMvcConfigurer {
    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //配置多拦截器
		registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
    }
}

3. 拦截器参数

主要是在preHandle方法中做校验,返回true还是false;
preHandle方法是一个拦截器的执行方法,在请求到达Controller时进行拦截操作;
preHandle方法中的handler参数是被拦截的请求的Controller对象,它有以下两个主要用处:

  1. 可以用handler来判断当前请求的Controller类和方法,从而进行特定的业务处理。例如,可以根据不同的Controller类或方法来设置响应头、重定向或转发请求等操作。
  2. 可以利用handler参数来访问Controller方法中定义的参数、注解或其他信息。例如,可以通过handler.getParameterAnnotations()方法获取方法参数上的注解并进行业务处理,或者通过handler.getMethodParameters()方法获取方法的参数信息进行业务逻辑操作。

这里给出大致原理:

实现上述功能的底层原理之一就是Java的反射机制。handler参数本质上是一个HandlerMethod对象,包含了被拦截的请求对应的Controller类和方法信息以及该方法的参数信息等细节
在具体的业务实现中,可以利用反射机制来获取HandlerMethod对象中的各种信息进行业务逻辑的处理。例如,可以通过调用HandlerMethod对象的getMethod()方法获得被拦截方法的Method对象,这样就可以对原始方法进行操作

下面给出示例代码:

@Component
//定义拦截器类,实现HandlerInterceptor接口
//注意当前类必须受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {
    @Override
    //原始方法调用前执行的内容
    //返回值类型可以拦截控制的执行,true放行,false终止
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String contentType = request.getHeader("Content-Type");
        HandlerMethod hm = (HandlerMethod)handler;
        System.out.println("preHandle..."+contentType);
        System.out.println(hm.getMethod().getClass());
        return true;
    }

    @Override
    //原始方法调用后执行的内容
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    @Override
    //原始方法调用完成后执行的内容
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

控制台输出:
ssm拦截器配置,ssm,学习,servlet,java,spring,mvc

4. 拦截器链配置

了解即可,一般是单个拦截器

ssm拦截器配置,ssm,学习,servlet,java,spring,mvc文章来源地址https://www.toymoban.com/news/detail-807644.html

到了这里,关于SSM框架学习-拦截器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 拦截器的配置

    Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。 拦截器依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。 编写controll

    2024年01月15日
    浏览(75)
  • springboot 拦截器的配置

    编写拦截器 对于前后端分离架构 preHandle 会在方法执行前执行,按照拦截器顺序执行 postHandle 会在方法return前执行,按照拦截器顺序逆序执行 afterCompletion 方法return 之后执行 ,按照拦截器顺序逆序执行 拦截器注册

    2024年02月15日
    浏览(42)
  • Springboot如何配置拦截器

    在 Spring Boot 中,配置拦截器需要继承 HandlerInterceptorAdapter 类,并重写其中的 preHandle()、postHandle()、afterCompletion() 等方法。下面是一个详细的实例: 首先,我们创建一个拦截器类 MyInterceptor,继承 HandlerInterceptorAdapter 类,并在其中重写 preHandle() 方法: 其中,preHandle() 方法用于

    2024年02月13日
    浏览(46)
  • Spring Boot 配置拦截器

    通过拦截器,我们可以针对特定 URI 做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。 新建登录验证类  LoginValidationInterceptor.java : 定义一个拦截器类后,您需要实现  HandlerInterceptor  接口,其有三个方法可以重写: preHandle : 在调用 Controller 方

    2024年02月08日
    浏览(57)
  • 拦截器学习

    Spring MVC 中的拦截器( Interceptor )类似于ServLet中的过滤器( Filter ),它主要用于拦截用户请求并作出相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。 一个拦截器,只有 preHandle 方法返回 true , postHandle 、 afterCompletion 才有可能被执行

    2024年02月09日
    浏览(23)
  • SpringMvc中拦截器的配置及应用

    拦截器原理 在 Spring MVC 中,拦截器(Interceptor)是一种机制,用于拦截请求并在处理程序(Controller)执行之前或之后执行一些操作。拦截器允许您在请求的不同阶段(如处理程序执行前、处理程序执行后、视图渲染前、视图渲染后等)添加自定义逻辑。 其中问号就是拦截器

    2024年01月22日
    浏览(43)
  • 以配置的方式开关axios拦截器功能

    前景提要: ts 简易封装 axios,统一 API axios 很多额外功能都是基于拦截器实现。有些功能想要全局使用,因此将拦截器注册在全局。比如重复请求过滤。但也有一小部分请求不希望进行过滤,比如并发上传文件。 因此希望可以在具体的请求方法上,通过配置 config 从而决定针

    2024年02月06日
    浏览(42)
  • UniApp 封装全局请求示例并配置拦截器以及错误回调指南

    本文将介绍如何在 UniApp 中封装全局请求示例,并配置请求拦截器和错误回调函数,以便统一处理网络请求、添加请求头、处理错误等功能。通过本指南,你将学习如何优化请求流程并提高代码的可维护性。 首先,确保你已经创建了一个 UniApp 项目。 在项目的根目录下创建一

    2024年02月08日
    浏览(45)
  • Django实战项目-学习任务系统-自定义URL拦截器

    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。 首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题。 Django框架本身也有URL拦截器,但是因为本系统用户模型跟Django框架本身用户模

    2024年02月06日
    浏览(41)
  • 学习 [Spring MVC] 的JSR 303和拦截器,提高开发效率

                                                   🎬 艳艳耶✌️ :个人主页                                                  🔥 个人专栏 : 《推荐】Spring与Mybatis集成整合》                                                  ⛺️    生活的理想,不断更

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包