Spring Boot学习笔记(四)

Spring boot学习笔记之四:SpringBoot操作之Spring-Data-Jpa Spring-Data-Jpa JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。Spring Data JPA 框架,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,至此,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JP... 阅读详情

Spring Boot中使用拦截器

是 AOP 的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请 求。使用场景比较多的是判断用户是否有权限请求后台,更拔高一层的使用场景也有,比如拦截器可以 结合 websocket 一起使用,用来拦截 websocket 请求,然后做相应的处理等等。

1. 拦截器的使用

1.1 定义拦截器
定义拦截器,只需要实现 HandlerInterceptor 接口,HandlerInterceptor 接口是所有自定义拦截 器或者 Spring Boot提供的拦截器的鼻祖,所以,首先来了解下该接口。该接口中有三个方法: preHandle(……) 、 postHandle(……) 和afterCompletion(……) 。

(1)preHandle(……) 方法:该方法的执行时机是,当某个 url 已经匹配到对应的 Controller 中的某个方法,且在这个方法执行之前。所以 preHandle(……) 方法可以决定是否将请求放行,这是通 过返回值来决定的,返回 true则放行,返回 false 则不会向后执行。
(2)postHandle(……) 方法:该方法的执行时机是,当某个 url 已经匹配到对应的Controller 中的某 个方法,且在执行完了该方法,但是在 DispatcherServlet 视图渲染之前。所以在这个方法中有 个ModelAndView 参数,可以在此做一些修改动作。
(3)afterCompletion(……)方法:顾名思义,该方法是在整个请求处理完成后(包括视图渲染)执 行,这时做一些资源的清理工作,这个方法只有在 preHandle(……)被成功执行后并且返回 true 才会被执行。

举例:
自定义一个拦截器:

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method  method = handlerMethod.getMethod();
        String methodName = method.getName();
        System.out.println("====拦截到了方法:{},在该方法执行之前执行===="+ methodName);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("执行完方法之后进执行(Controller方法调用之后)..");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("整个请求都处理完了..");
    }
    
}

配置拦截器:
在 Spring Boot 2.0 之前,我们都是直接继承 WebMvcConfigurerAdapter 类,然后重写addInterceptors 方法来实现拦截器的配置。但是在 Spring Boot 2.0 之后,该方法已经被废弃了(当然,也可以继续用),取而代之的是 WebMvcConfigurationSupport 方法,中重写 addInterceptors 方法,将我们上面自定义的拦截器添加进去, addPathPatterns方法是添加要拦截的请求,这里我们拦截所有的请求。这样就配置好拦截器了,如下:

@Configuration
public class MyInterceptorConfig extends WebMvcConfigurationSupport {

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
        super.addInterceptors(registry);
    }
}

添加测试验证:让其跳转到 hahaha.html 页面

@Controller
@RequestMapping("/interceptor")
public class InterceptorController {

    @RequestMapping("/test")
    public String test(){
        return "hahaha";
    }
}

发现无法访问。也就是说,虽然 Spring Boot 2.0 废弃了WebMvcConfigurerAdapter,但是WebMvcConfigurationSupport 又会导致默认的静态资源被拦截,这就需要我们手动将静态资源放开。
除了在 MyInterceptorConfig 配置类中重写 addInterceptors 方法外,还需要再重写一个方法: addResourceHandlers ,将静态资源放开:

@Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }

这样配置好之后,重启项目,静态资源也可以正常访问了。
还有一种方法:
我们不继承 WebMvcConfigurationSupport 类,直接实现 WebMvcConfigurer 接口,然后重写addInterceptors 方法,将自定义的拦截器添加进去即可,如下:

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }

2. 拦截器使用实例

https://blog.youkuaiyun.com/CodersCoder/article/details/106444313

参考:武哥聊编程

spring boot 2.1学习笔记【四】属性配置 从这一章节开始,才进入真正的springboot2.1学习 属性配置是springboot中比较常用且重要的功能,很多自定义的配置及自动装配都依赖该功能 常规属性配置 类型安全的属性配置(强烈推荐) 阅读详情

相关推荐

ADC噪声参数博弈论:为何24位ADC的有效分辨率可能不如16位?

本文深入探讨了ADC噪声参数的核心矛盾,揭示了24位ADC有效分辨率可能不如16位ADC的根本原因。关键在于跳出单纯比较位数的误区,转而关注输入参考噪声这一绝对指标。文章通过分析参考电压对满量程范围和噪声模型的影响,阐述了动态范围与最小可测信号之间的取舍逻辑,为工程师提供了基于系统实际需求的ADC选型与噪声评估框架。

snow3的博客 704

Spring MVC处理器拦截器

Spring MVC 处理器拦截器 是什么? HandlerInterceptor是Spring提供的用于拦截处理器handler(如HandlerMethod)的扩展接口,类似于Servlet的过滤器(Filter),是Spring MVC的核心组件之一。 定义(Definition) Spring提供了HandlerInterceptor及其支持异步的扩展AsyncHandlerInterceptor两个处理器拦截器接口,其定义分别如下: HandlerInterceptor package&nbsp

R先生专栏 2039

Simlink与PX4硬件在环仿真(HIL)实现

Simlink与PX4硬件在环仿真(HIL)实现 介于涉及的知识比较多,这里只是简单的介绍一下,更多内容可以参考阿木实验室《基于matlab模型开发》课程。 硬件在环HIL介绍 simlink与PX4通信实现 硬件在环HIL介绍 为来贯彻万物都可以用数学公式表示,我们以simlink的角度来看我们的无人机,那么UAV可以分为以下的几个模块: 传感器模型 滤波器模块 控制器模...

Zipout的博客 6210

SpringBoot添加Interceptor后addInterceptors方法不执行,拦截器不生效

此处记录一下,项目使用中遇到过这个问题,百度长篇大论每一句有用的。 问题阐述 通过实现【WebMvcConfigurer】类后,addInterceptors方法就不执行,导致拦截器不生效。 原因 原因其实很简单,因为代码中有【WebMvcConfigurationSupport】的继承类,SpringBoot会判断,如果有【WebMvcConfigurationSupport】就不会加载【WebMvcConfigurer】。 解决方案 可在【WebMvcConfigurationSupport】的实现类中

铁蛋的博客 6829

RK3568 NFS rootfs配置与调试实战指南(已验证)

本文提供了在RK3568开发板上配置NFS rootfs的完整实战指南。通过详细步骤讲解如何配置uboot的bootargs参数、编译支持NFS的内核,并在PC端搭建TFTP与NFS服务器,最终实现从网络挂载根文件系统,从而极大提升驱动调试和应用程序开发的迭代效率。

weixin_29175469的博客 281

华为交换机密码策略配置避坑指南:明文/密文、长度、复杂度,一个命令就出错

本文详细解析华为交换机密码策略配置的关键要点,包括密码长度、复杂度及等保合规要求。通过实战案例揭示常见配置误区,如明文/密文密码格式差异、复杂度检查联动机制等,帮助网络工程师避免安全漏洞。特别针对等保二级和三级要求,提供可直接落地的安全加固方案。

weixin_30879169的博客 368

Spring Boot学习笔记(四)Spring Boot对 Json 的支持

Spring Boot对 Json 的支持 上一篇:简单的Spring Boot Web开发 IDEA2019.1:新建一个项目:demo0723-2,添加与上篇同样的组件依赖,并在domain包下建立一个实体类:User.java: package wen.demo07232.domain; public class User { private String name; ...

Stephanie17395的博客 454

MATLAB新手必看:SVPWM七段式算法仿真全流程解析(附完整代码)

本文为MATLAB新手和电机控制初学者提供了SVPWM七段式算法的完整仿真与代码实现指南。文章详细解析了从扇区判断、矢量作用时间计算到PWM波形生成的全流程,并附带了可直接运行的MATLAB代码,帮助读者在理解FOC控制核心算法的基础上,快速掌握工程仿真与调试技巧。

weixin_29074295的博客 281

Spring Boot学习笔记总结(四)

1. Web请求参数处理 Rest映射源码解析 1.1 OrderedHiddenHttpMethodFilter对象原理 1.2 表单提交要使用Rest的使用 1.3 Rest使用客户端工具发送不同类型的请求 1.4 如何改变默认的_method? 2. Web请求参数处理 请求映射原理 3. 请求处理常用的参数注解 3.1 SpringMvc常用的一些注解 3.2 SpringBoot的矩阵变量 和 UrlPathHelper类 4. 请求参数处理 类型参数的解析原理 4.1 找到合适的HandlerA

探索技术与实践的旅程,分享编程经验与工具使用心得,助力开发者提升技能。 2108

23、电生理与CSD分析:探索大脑活动的前沿技术

本文介绍了电生理与电流源密度(CSD)分析在探索大脑活动中的前沿应用。从电生理技术的发展现状,到局部场电位(LFPs)的起源与解释,重点阐述了CSD分析的原理、实验方法及其在绘制皮层兴奋流、解析突触输入和研究自发振荡中的广泛应用。文章还总结了该领域的优势与挑战,并展望了技术改进、多模态融合、数据分析创新及临床拓展的未来方向,展示了这些技术在揭示大脑功能机制中的关键作用。

Apple的专栏 119

Python爬虫:抓取交通工具班次数据(公交、地铁等时刻表)

然而,由于这些信息并不总是以开放的API形式提供,因此爬虫技术成为了获取和分析这些数据的有效途径。然而,由于很多公交公司没有公开API,通常我们通过抓取其网页中的时刻表数据来获取信息。通过这些步骤,您可以轻松抓取交通工具的班次信息,并进行进一步的数据分析,辅助交通规划和出行推荐系统的建设。在这篇文章中,我们将演示如何使用Python爬虫技术抓取公交、地铁等交通工具的班次和时刻表数据。我们可以将公交和地铁的数据合并,进行综合分析。我们可以进一步分析地铁班次的发车频率,甚至可以比较不同地铁线路的班次。

2201_76125261的博客 954

Spring Boot实战学习笔记(四)

摘要本文为学习Java EE开发的颠覆者 Spring Boot实战的学习笔记,学习了一遍,但是好记性不如烂笔头,所以文章记录下来。图书购买地址为: https://item.jd.com/11894632.html.Spring Boot实战学习笔记1Spring Boot实战学习笔记2Spring Boot实战学习笔记3Spring Boot实战学习笔记4Spring Boot实战学习笔记5S...

殘遛的博客 612

【微信小程序】微信小程序 manifest.json 配置 ES6 转 ES5 开关:3步让你的代码兼容性更强

ES6(ECMAScript 6)是 JavaScript 的最新标准,引入了许多新的语法和特性,如箭头函数、模板字符串、解构赋值等。然而,不是所有的环境都支持 ES6,特别是旧版本的浏览器和一些特定的运行环境。为了确保代码的兼容性,我们需要将 ES6 代码转换为 ES5 代码。通过本文的详细讲解,相信你已经学会了如何在文件中配置微信小程序的 ES6 转 ES5 开关。这个小小的配置步骤能够显著提高代码的兼容性和稳定性。如果你有任何问题或需要进一步的帮助,欢迎随时留言交流。

java专栏 1359

spring boot整合Thymeleaf的那些坑(spring boot 学习笔记之四)

这里简单记录一下Thymeleaf配置和使用的步骤 1、修改pom文件,添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></depende...

weixin_30401605的博客 378

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring Boot学习笔记:(四)整合Mybatis

Mybatis是国内使用较为广泛的ORM框架,本文将简要介绍Spring Boot中整合Mybatis的步骤。 一、准备 1.1 导入依赖 首先需要导入Mybatis和MySQL相关依赖: &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.mybatis.spring.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;myb

noaman_wgs的博客 592

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Boot 学习笔记(四)—— 日志

SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志;spring-boot-starter-logging(会被其他场景启动器依赖,无需主动依赖)场景启动器已经为我们自动配置了日志的转换功能; 当我们引入其他框架的时候,如果pom依赖了非slf4j的日志实现框架,则需要在spring boot中排除jar包,否则会包名冲突;例如spring 使用的就是commons logging,在引入spring-boot-starter-web 的时候,默认就给排除.

q42368773的博客 200

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring Boot 学习笔记(四)

Spring Boot 学习笔记(四) 自动配置原理 配置文件到底能写什么?怎么写?自动配置原理;

DramaLifes的博客 186

Spring Boot学习笔记(四) -编写HelloWorld

创建项目 创建一个空项目 创建模块 编写POM文件 修改Tomacat端口 创建Controller

qq_39356904的博客 219

spring boot 学习笔记(四)rest ful api

restful api 的小故事(抄袭的)我和我的女朋友张童鞋一起出去喝奶茶。张童鞋是北大青鸟的学员,对 restful 感到很困惑,希望我给她一些帮助我如果给她讲,restful全称是Representational State Transfer翻译成中文的意思是表述性状态转移...估计我和张童鞋就要Say GoodBye了。正好一起出来和奶茶,我在纸条上写下了这样的内容order:    ad...

qq_41441210的博客 332

(学习笔记)SpringBoot基础(四)Spring Boot 的 AOP 支持

摘要: Spring Boot通过spring-boot-starter-aop简化了AOP(面向切面编程)的整合,自动引入依赖并隐式开启代理支持,无需手动配置。AOP用于解耦横切关注点(如日志、事务),通过动态代理将通用逻辑织入业务方法。核心概念包括切面(Aspect)、切入点(Pointcut)、通知(Advice)等,支持5种通知类型(如前置、环绕)。相比传统Spring需手动配置依赖和注解,Spring Boot实现了零配置,默认使用CGLIB代理,开发者只需定义切面类即可快速实现功能增强。

qq_45913654的博客 1218

Spring Boot学习笔记(四)—— 使用Spring Security

一、前言 Spring Boot同样提供了关于Spring Security的自动配置支持,在org.springframework.boot.autoconfigure.security包中可以看到,在SpringBootWebSecurityConfiguration中,为我们自动配置了: 一个内存中的用户user,密码在程序启动时出现; 忽略对静态文件的拦截, private

swift0824的博客 497

SpringBoot2.0学习笔记:(四) Spring Boot的日志详解

一、日志框架的介绍 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons Logging), Log4j, Log4j2, Logback、 SLF4j、 jboss-logging等等。 Spring Boot 2.*默认采用了slf4j+logback的形式 ,slf4j是个通用的日志门面,logback就是个具体的日志...

第二庄 1万+

spring boot学习笔记(四)

一,spring开启自动热部署 在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率;热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,这样大大提高了我们开发的效率; spring boot 开启自动热部署需要添加一个插件实现,在maven下添加以下依赖 &amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;org.s...

kevin的博客 219

Maven Spring boot项目学习笔记 注解的学习(四)

文章转自http://blog.youkuaiyun.com/sudiluo_java/article/details/51858978 声明Bean的注解: @Component : 组件,没有明确的角色 @Service : 在业务逻辑层(service层)使用 @Repository : 在数据访问层(dao层)使用. @Controller : 在展现层(MVC--Spr...

ba12313的博客 157

spring-boot(四)学习笔记之思维导图与项目实战

代码已上传到我的github上,如果有需要的话可以移步:https://github.com/1181888200/Study/tree/master/Spring-boot最后祝大家学业有成,欢迎关注和star

一不小心的程序员 523
上一篇: SpringBoot整合MyBatis-Plus(附源码)
下一篇: Spring Boot学习笔记(五)
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值