• 在springboot中使用拦截器


    拦截器Interceptor,是SpringMVC中的核心内容,利用spring的AOP(Aspect Oriented Programming, 面向切面编程)特性,可以很方便的对用户的业务代码进行横向抽取,根据具体业务需求对应用功能进行增强。
    在SpringBoot中使用Interceptor,同时采用全注解开发,涉及到以下接口和类:

    1. HandlerInterceptor:处理器拦截器,handler就是处理器,在springboot web开发中,由控制器来处理web请求,因此handler具体指控制器
    2. 使用全注解开发,通过@Configuration注解,让一个java对象主任到IOC容器,并作为配置对象,这里的JavaConfig类相当于一个xml配置文件;
    3. 在以前的xml配置中
      (1)通过引入一些标签进行配置,在JavaConfig中,通过继承一个类或者实现一个接口来实现配置,这里所继承的类、所实现的接口就相当于引入的标签;
      (3)通过设置所引入标签的属性和值,可以实现个性化配置,在JavaConfig中通过覆盖类或者接口的方法来实现个性化配置。

    下面通过一个案例来实现自定义拦截器
    拦截/user/开头的请求,不拦截/usr/login请求

    1. 定义拦截器

    package cn.eis220.web;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("执行了logininterceptor的preHandle方法");
            return true;
        }
    }
    

    2. 使用JavaConfig注册拦截器

    java配置类相当于xml配置文件
    xml中通过引入interceptor标签来进行配置,java配置类通过实现WebMvcController进行配置;
    xml中通过修改标签的属性和值来个性化配置,java配置类通过实现WebMvcController的方法进行个性化配置

    package cn.eis220.config;
    
    import cn.eis220.web.LoginInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class MyAppCofnig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            LoginInterceptor loginInterceptor = new LoginInterceptor();
    
            String[] path = {"/user/**"};
            String[] excludePath = {"/user/login"};
    	registry.addInterceptor(loginInterceptor).addPathPatterns(path).excludePathPatterns(excludePath);
        }
    }
    

    3. 定义控制器,测试拦截器

    package cn.eis220.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class BootController {
        @RequestMapping("/user/account")
        @ResponseBody
        public String userAccount(){
            return "/user/account";
        }
    
        @RequestMapping("/user/login")
        @ResponseBody
        public String userLogin(){
            return "/user/login";
        }
    }
    

    4. 总结

    步骤:

    1. 如何定义自己的拦截器:
      实现HandlerInterceptor接口的方法,来自定义拦截器
    2. 如何注册拦截器:
      JavaConfig配置类实现WebMvcConfigurer接口的addInterceptor方法来注册拦截器
  • 相关阅读:
    Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网
    如何判断服务器是物理机还是虚拟机
    生成Oracle的AWR报告
    Oracle数据库自带表空间
    Oracle数据库用户锁定原因以及处理方式(ORA-28000)
    Nginx反向代理和负载均衡
    Linux上Tomcat部署JavaWeb项目
    linux下memcached安装以及启动
    linux上安装activeMQ
    Windows下ActiveMQ下载、安装部署
  • 原文地址:https://www.cnblogs.com/arminker/p/15806725.html
Copyright © 2020-2023  润新知