【SpringBoot系列】WebMvcConfigurer配置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一.基本介绍

1.WebMvcConfigurer 介绍

在 Spring MVC 框架中,WebMvcConfigurer 是一个非常重要的接口,它允许开发者通过 Java 配置的方式对 Spring MVC 进行定制化设置。addInterceptors 方法是 WebMvcConfigurer 接口中用于注册拦截器的关键方法,它使得开发者可以在请求处理流程中的不同阶段插入自定义逻辑,例如权限验证、日志记录等。以下是对 addInterceptors 方法的详细解析,以及如何使用它来增强你的 Web 应用程序。
在这里插入图片描述

2.拦截器的作用

拦截器在 Spring MVC 中主要用于以下场景:

  1. 日志记录:在请求处理前后记录日志,便于问题追踪和性能监控。
  2. 权限检查:确保用户请求的合法性,拦截未授权访问。
  3. 数据预处理:在请求到达控制器之前,对请求参数进行预处理或验证。
  4. 性能监控:统计请求处理时间,优化应用性能。

3.InterceptorRegistry

InterceptorRegistry 是 Spring MVC 配置中用于注册拦截器的类。它提供了一系列方法来配置拦截器的行为,包括指定拦截哪些请求路径以及排除哪些请求路径。以下是 InterceptorRegistry 的一些主要方法:

  1. addInterceptor: 用于添加一个拦截器实例。这个方法接受一个实现了 HandlerInterceptor 接口的实例,并返回一个 InterceptorRegistration 对象,允许进一步配置该拦截器,例如添加 URL 模式和排除模式。

  2. addWebRequestInterceptor: 这个方法与 addInterceptor 类似,也是用于添加拦截器,但它专门用于实现 WebRequestInterceptor 接口的拦截器。

  3. getInterceptors: 该方法返回所有注册的拦截器列表。这可以用于检查哪些拦截器已经配置在应用程序中。

  4. addPathPatterns: 这是一个链式调用的方法,用于指定拦截器应该应用到的 URL 路径模式。可以调用多次来添加多个路径模式。

  5. excludePathPatterns: 与 addPathPatterns 相对应,这个方法用来排除某些路径模式,让拦截器不会应用到这些路径上。

  6. order: 允许指定拦截器的顺序。数字越小,优先级越高。

通过这些方法,开发者可以根据需要配置拦截器的行为,以满足不同的业务场景。例如,可以创建一个自定义的 HandlerInterceptor 实现,并使用 InterceptorRegistry 来注册这个拦截器,同时指定它应该拦截的请求路径以及排除的请求路径。这样,当请求进入应用程序时,注册的拦截器就会按照配置的规则进行请求的预处理、后处理以及完成后的处理。

二.实战演练

1.配置文件

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 配置myInterceptor的拦截规范(如拦截的路径等等)
        registry.addInterceptor(new AuthInterceptor())
                // 设置需要拦截的路径(这里拦截所有的路径)
                .addPathPatterns("/**")
                // 设置书籍放行
                .excludePathPatterns("/bookInfo/**")
                // 设置登录放行
                .excludePathPatterns("/login", "/getOpenId", "/register")
                // 设置Swagger访问放行
                .excludePathPatterns("/api-docs", "/swagger-ui.html/**", "/swagger-ui.html", "/swagger-resources/**", "/swagger-ui.html#/**")
                // 如资源文件放行
                .excludePathPatterns("/webjars/**", "/doc.html", "classpath:/META-INF/resources/");
    }
}

在这里插入图片描述

2.处理拦截器

@Component
public class AuthInterceptor implements HandlerInterceptor {

    @Autowired
    private NewSpaceJedisClient belleJedisClient;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 如果请求的URL不包含排除路径,则进行Token验证
        String token = request.getHeader("Authorization");
        if (token == null || token.isEmpty()) {
            // 如果没有Token,返回401 Unauthorized
            throw new ArithmeticException("No token provided");
        }
        // 验证token是否有效
        final String userName = JwtTokenUtil.verifierJwtToken(token);
        String redisToken = belleJedisClient.get(RedisConstant.TOKEN_PREFIX + userName);
        if (StringUtils.isEmpty(redisToken)) {
            // 有token 但是token失效了
            throw new ArithmeticException("Token is invalid");
        }
        return true;
    }
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

Spring Boot提供了多种方法来解决跨域问题,其中之一是通过实现WebMvcConfigurer接口来自定义处理器、拦截器、视图解析器、转换器以及设置跨域等。 具体而言,可以通过实现WebMvcConfigurer接口来配置跨域。其中,configureDefaultServletHandling方法是用来配置默认的Servlet处理,可以使用DefaultServletHandlerConfigurer的enable方法来开启默认的Servlet处理器,这样可以处理静态资源请求。另外,也可以通过enable方法指定默认的Servlet名称。 除了实现WebMvcConfigurer接口,还可以继承WebMvcConfigurationSupport类来实现定制化的配置。这个类提供了更加灵活的配置选项。 总结起来,通过实现WebMvcConfigurer接口或继承WebMvcConfigurationSupport类可以在Spring Boot中实现跨域功能。具体的配置方法可以根据实际需求选择适合的方式来进行配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot配置接口:WebMvcConfigurer](https://blog.csdn.net/JokerLJG/article/details/123224002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【springboot】--跨域问题及webMvcConfigurer介绍](https://blog.csdn.net/xunmengyou1990/article/details/124557829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kwan的解忧杂货铺@新空间代码工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值