SpringBoot中拦截器的使用

news2024/12/24 8:32:12

SpringBoot中拦截器接口:

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

        执行顺序:

                preHandle -> controller中的目标方法 -> postHandle -> afterCompletion(请求处理完成之后)

拦截器设置流程:

1、拦截器的业务逻辑

        需要实现HandlerInteceptor接口

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
        if(loginUser!=null){
            return true;
        }
        return 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、把配置放在容器中

//配置web功能的都需要实现WebMvcConfigurer,
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");
    }
}

        WebMvcConfigurer接口中有许多web功能:

public interface WebMvcConfigurer {

    default void addInterceptors(InterceptorRegistry registry) {
    }

    default void addResourceHandlers(ResourceHandlerRegistry registry) {
    }

    default void addCorsMappings(CorsRegistry registry) {
    }

    default void addViewControllers(ViewControllerRegistry registry) {
    }

    default void configureViewResolvers(ViewResolverRegistry registry) {
    }

    default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
    }

    default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
    }

    default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    }

......

        增加拦截路径和排除拦截路径:

registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**") //会拦截所有的请求,也包括静态资源
                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");

   记录一下/**和/*的区别:

SpringMVC 拦截器拦截 /* 和 /** 的区别:_Simba1949的博客-CSDN博客

        实验:

 将静态资源下的 fonts文件和css文件中设置为/*,然后看访问时候能否放行:

首先是css下的文件:

 css下没有任何文件夹了,直接都是文件,按链接里的解释,是可以访问到的。

接着测试fonts文件夹下,按链接意思应该是会被拦截的:

 所以很明确了:xxx/*的范围只是针对到xxx/  下的所有文件,不会包含文件夹

                        xxx/**的范围就是 xxx/ 下的所有文件夹和文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【jmeter】windows下使用 (测试MQTT)

1. 添加线程组 二、添加如下请求 1. 添加创建连接请求-选中线程组&#xff0c; 点击右键&#xff0c;添加>取样器>MQTT Connect设置MQTT连接 本次使用本机开启的MQTT服务进行测试&#xff0c;默认ip为127.0.0.1&#xff0c;端口默认1883 2. 添加发布请求-选中线程组 …

面试:各种热修复框架对比

目前Android热修复的技术方案大致可以归类为以下几种&#xff1a; 资源热替换代码热修复动态库替换 资源修复 创建新的AssetManager实例&#xff0c;利用反射加载外部(SD卡)需要热修复的资源路径通过当前Activity实例获取Resouces资源类&#xff0c;然后反射得到mAssets属性&…

powerlevel10k 颜色和图标的自定义设置

文章目录1. 颜色的更改2. 图标的更改3. 附录powerlevel10k 的设置向导命令是p10k configure如果想在这个预定好的设置上面做一些个人的自定义设置&#xff0c;就得更改 powerlevel10k 的配置文件&#xff1a;~/.p10k.zsh 下面的操作主要就是在这个配置文件上面更改。 1. 颜色的…

浅谈芯片验证中的仿真运行之 compilation unit 技术(实践篇)

前言 前面文章,讲述了一些关于SV语法下,编译问题的一些基本概念。其实,芯片验证中仿真工具编译仿真文件、RTL文件的一些规则,依据每一家仿真工具内部的编译原理,都是保密的,用户只要按照仿真工具的使用规则去使用,即可。最近,笔者遇到了一个问题,今天空下来,总结一下…

Windows本地安装Redis且设置服务自启

redis中文网&#xff1a;http://redis.cn/ 如果是安装Windows版的redis需要去GitHub上下载安装包 如果是在Linux上安装&#xff0c;可以直接使用命令进行安装 本次教程是基于Windows系统进行的 GitHub地址&#xff1a;https://github.com/microsoftarchive/redis 选择需要下…

Online Decision Transformer

摘要 最近的工作表明&#xff0c;离线强化学习 (RL) 可以表述为序列建模问题 (Chen et al., 2021; Janner et al., 2021)&#xff0c;并通过类似于大规模语言建模的方法来解决。 然而&#xff0c;RL 的任何实际实例化还涉及在线组件&#xff0c;其中在被动离线数据集上预训练的…

Express:Express 中间件

中间件的概念 1. 什么是中间件 中间件&#xff08;Middleware &#xff09;&#xff0c;特指业务流程的中间处理环节。 2. 现实生活中的例子 在处理污水的时候&#xff0c;一般都要经过三个处理环节&#xff0c;从而保证处理过后的废水&#xff0c;达到排放标准。 处理污水…

aws cloudformation 堆栈集的创建和使用

资料 使用 AWS CloudFormation StackSets 跨多个 AWS 账户和区域配置资源AWS cloudformation示例模板堆栈集堆栈实例状态原因 很多组织使用大量的 AWS 账户&#xff0c;通常用 AWS Organizations 将这些账户组织为分层结构&#xff0c;分组为不同的组织部门 (OU)。并且希望确…

Teams app 的 SSO 机制

我们来继续我们的 Teams sample 之旅&#xff0c;上一个讲了 Tab app&#xff0c;那我们这里再深入一步&#xff0c;看一下如何使用 sso 机制。 sso 是一个很有用机制&#xff0c;它可以让我们的 teams app 能获取当前用户的身份。sso 很多时候比较难彻底理解&#xff0c;在开…

刷爆力扣之公平的糖果交换

刷爆力扣之公平的糖果交换 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#xff…

【数据链路层】循环冗余码CRC、后退N帧协议GBN、选择重传协议SR、CSMA/CA

文章目录循环冗余码CRC多帧滑动窗口连续ARQ协议后退N帧协议GBN选择重传协议SRCSMA/CA---针对无线局域网处理隐蔽站问题RTS&#xff0c;CTS循环冗余码CRC /*** 计算CRC16校验码** param bytes* return* [1,3,4,1,205,1,18,235,173]*/public static String CRC16(byte[] bytes) {…

终于见识到了微服务的天花板!SpringCloud全线手册,太强了

后台都是在问微服务架构的面试题怎么答&#xff0c;想聊聊微服务架构了。微服务架构一跃成为 IT 领域炙手可热的话题也就这两年的事&#xff0c;大量一线互联网公司因为庞大的业务体量和业务需求&#xff0c;纷纷投入了微服务架构的建设中&#xff0c;像阿里巴巴、百度、美团等…

Kamiya丨Kamiya艾美捷大鼠微量白蛋白酶联免疫吸附试验说明书

Kamiya艾美捷大鼠微量白蛋白酶联免疫吸附试验预期用途&#xff1a; 大鼠微量白蛋白酶联免疫吸附试验&#xff08;ELISA&#xff09;是一种高灵敏度的双位点酶联免疫吸附试验&#xff08;ELISA&#xff09;大鼠生物样品中微量白蛋白的测定。仅供研究使用。 引言 白蛋白&#x…

Java项目:ssm学生学籍管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 SSM项目-学生学籍管理系统。该项目分管理员、老师、学生三种用户角色。每种角色分别对应不同的菜单&#xff1b; 以下分别介绍各个角色对应的功…

[附源码]计算机毕业设计springboot基于Java的日用品在线电商平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

二进制数据的贝叶斯非参数聚类算法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 部分运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 利用图像结构信息是字典学习的难点,针对传统非参数贝叶斯算法对图像结构信息利用不充分,以及算法运行效率低下的问题,该文…

GoLand2022.2.5版本Hello调动Greetings包

安装Goland2022.2.5 版本 1.官网下载goland-2022.2.5.dmg版本&#xff08;Mac)版本。如果是windows版本也可以直接下载&#xff09; 2.配置gopath&#xff0c;基本都是配置.我这里配置为/usr/local/go 作为全目录&#xff0c;如果是windows&#xff0c;直接在环境中配置path路…

Mysql基础知识篇(二)

1.UNION 与 UNION ALL 的区别&#xff1f; 如果使用 UNION&#xff0c;会在表链接后筛选掉重复的记录行如果使用 UNION ALL&#xff0c;不会合并重复的记录行从效率上说&#xff0c;UNION ALL 要比 UNION 快很多&#xff0c;如果合并没有刻意要删除重复行&#xff0c;那么就使…

自动化测试框架

自动化测试框架1.自动化测试框架核心功能1.数据驱动2.页面驱动3.关键字驱动2.关键字驱动实现-文档形式3.关键字驱动实现-表格形式1.自动化测试框架核心功能 这三种驱动测试可以结合使用来完成系统的自动化测试。可以将测试数据 1.数据驱动 将测试代码和测试数据分离&#xff…

科技云报道:云计算走向工业互联网“深水区”

科技云报道原创。 在新科技革命中&#xff0c;将网格化、信息化与智能化深度融合的工业互联网&#xff0c;正在将人、机、物全面互联&#xff0c;实现全要素、全产业链、全价值链的连接&#xff0c;推动传统产业加快转型升级、助力新兴产业加速发展壮大。 工业如何在快速变革…