spring boot三大器之Interceptors拦截器实现

我们可以采用两种方式来配置WebMvcConfigurer
1. JavaBean方式配置WebMvcConfigurer
2. WebMvcConfigurer实现类方式
方式一:JavaBean配置WebMvcConfigurer
采用JavaBean方式我们只需要添加一个web相关配置的类型,并且配置@Configuration注解,将该配置类托管给Spring IOC完成配置,代码配置如下所示:

/**
 * web配置类
 */
@Configuration
public class WebJavaBeanConfiguration {
    /**
     * 日志拦截器
     */
    @Autowired
    private LogInterceptor logInterceptor;
	/**
     * 实例化WebMvcConfigurer接口
     *
     * @return
     */
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            /**
             * 添加拦截器
             * @param registry
             */
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(logInterceptor).addPathPatterns("/**");
            }
        };
    }
}

我们通过@Bean注解的返回值来完成WebMvcConfigurer的配置实例化,在WebMvcConfigurer接口实例内调用addInterceptors方法完成添加拦截器配置,跟之前WebMvcConfigurerAdapter方式感觉没事区别,只不过是编码形式有一点变化。
测试拦截器
在上面配置内添加了一个LogInterceptor拦截器,该拦截器目的很简单,仅仅是测试拦截器配置是否生效,代码也很简单,输出访问地址的URI,实现代码如下所示:

@Component
public class LogInterceptor implements HandlerInterceptor {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(LogInterceptor.class);
@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        logger.info("请求路径:{}", request.getRequestURI());
        return true;
    }
}

测试控制器
为了测试访问地址被拦截需要添加一个测试控制器请求地址,测试控制器代码如下所示:

/**
 * 测试控制器
 */
@RestController
public class TestController {
    /**
     * 测试拦截地址
     * @return
     */
    @RequestMapping(value = "/index")
    public String index() {
        return "Success";
    }
}

运行测试配置
我们来启动项目,访问地址http://127.0.0.1:8080/index,查看控制台输出内容,如下所示:

2018-03-17 16:51:26.633  INFO 2152 --- [nio-8080-exec-1] c.h.c.interceptors.LogInterceptor        : 请求路径:/index

根据日志的输出我们判定JavaBean配置WebMvcConfigurer的方式是可以生效的,回想文章开头说到的关键字deault,既然default修饰的方法可以不被子类实现,那么我们完全可以实现WebMvcConfigurer接口,来添加对应的配置,下面我们来尝试添加一个新的配置类使用实现接口的方式来添加拦截器的配置。
方式二:实现类配置WebMvcConfigurer
我们创建一个名为WebConfiguration的配置类并且实现WebMvcConfigurer接口,代码如下所示:

/**
 * web相关配置类
 */
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
/**
     * 日志拦截器
     */
    @Autowired
    private LogInterceptor logInterceptor;
/**
     * 重写添加拦截器方法并添加配置拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(logInterceptor).addPathPatterns("/**");
    }
}

第二种方式有点我们之前使用的感觉,只不过之前是使用的WebMvcConfigurerAdapter抽象类,而现在我们直接使用WebMvcConfigurer接口。
正因为SpringBoot2.0是基于JDK1.8及以上版本,所以可以完全使用JDK1.8新特性提供更好的实现方式。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架中,拦截器是一种用于在请求处理过程中拦截请求或响应的组件。它们可以用于实现安全性、事务管理、日志记录等功能。下面是在Spring实现拦截器的步骤: 1. 创建一个实现HandlerInterceptor接口。这个接口定义了个方法:preHandle()、postHandle()和afterCompletion(),分别在请求处理前、请求处理后和视图渲染后被调用。 2. 在Spring配置文件中注册拦截器。配置文件中需要声明一个<mvc:interceptors>元素,并在其中定义拦截器的bean。 3. 指定要拦截的请求和拦截器的顺序。在配置文件中可以使用<mvc:interceptor>元素指定要拦截的请求路径,并使用<order>子元素指定拦截器的顺序。 4. 可以在拦截器中使用HandlerInterceptorAdapter来方便地实现拦截器的逻辑。 下面是一个简单的示例: 1. 创建一个拦截器: ``` public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理前执行拦截器逻辑 return true; // 返回true表示继续执行请求,返回false表示拦截请求 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在请求处理后执行拦截器逻辑 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在视图渲染后执行拦截器逻辑 } } ``` 2. 在Spring配置文件中注册拦截器: ``` <mvc:interceptors> <bean class="com.example.MyInterceptor"/> </mvc:interceptors> ``` 3. 指定要拦截的请求和拦截器的顺序: ``` <mvc:interceptor> <mvc:mapping path="/my/path/**"/> <bean class="com.example.MyInterceptor"/> <order value="1"/> </mvc:interceptor> ``` 在上面的示例中,拦截器会拦截所有以“/my/path/”开头的请求,并按照指定的顺序执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值