0 SpringBoot中文社区

尚未进行身份认证

我要认证

菜鸟选手/略懂java,js,python/crud码农/springboot中文社区站长

等级
TA的排名 27w+

在Java中实现Zip文件的压缩与解压缩

zip这里就不多说了,在网上找了很多代码,都觉得实现不够优雅,所以自己写了一个工具类。解压zip文件指定的文件进行zip压缩,对指定的目录进行zip压缩ZipUtilsimport java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.file.FileVisitResult;import java.nio.file.FileVisitor;import j

2020-10-14 10:19:50

RestTemplate与Gzip压缩

Gzip 是一种压缩算法,服务器经常通过这个算法来压缩响应体,再响应给客户端,从而减少数据体积,提高传输速度。客户端再通过Gzip解压缩,获取到原始的数据。因为需要压缩计算,所以会耗费额外的CPU资源。Gzip 与 HttpHeader对于压缩,这个行为来说,客户端与服务器都要经过协商。只有使用了同一种压缩算法,才能正确的解码出数据。http协议中定义了相关的headerContent-Encoding是一个实体消息首部,用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行

2020-10-12 21:10:09

在浏览器中异步下载文件监听下载进度

在浏览器中异步下载文件,其实就是把服务器响应的文件先保存在内存中。然后再一次下载到磁盘。第二次下载过程,就是把内存的数据IO到磁盘,没有网络开销。速度极快。之所以要先保存在内存,主要是可以在下载开始之前和下载结束后可以做一些业务逻辑(例如:校验,判断),还可以监听下载的进度。演示这里演示一个Demo,在点击下载摁钮后,弹出加loading框。在读取到服务器的响应的文件后。关闭loading框。并且在控制台中输出下载的进度。有点像是监听文件下载完毕的意思,也只能是像。从内存IO到磁盘的这个过程,JS

2020-09-14 22:44:55

SpringBoot中的所有配置属性(中文)

SpringBoot所有配置项的中文说明(使用Deepl翻译),由 SpringBoot中文社区 整理提供。目录1. Core properties2. Cache properties3. Mail properties4. JSON properties5. Data properties6. Transaction properties7. Data migration properties8. Integration properties9. Web properties10

2020-09-11 11:41:01

Springboot应用中设置Cookie的SameSite属性

Cookie除了key和value以外有几个属性。httpOnly 是否允许js读取cookiesecure 是否仅仅在https的链接下,才提交cookiedomain cookie提交的域path cookie提交的pathmaxAge cookie存活时间sameSite 同站策略,枚举值:Strict Lax None其他的都很熟悉了,最后一个是 Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。关于S

2020-08-31 15:44:49

客户端解析服务器响应的multipart/form-data数据

multipart/form-data,多部件请求体。这个请求体比较特殊,它可以拆分为多个部件,每个部件都有自己的header和body,最常用的地方就是:客户端文件上传,因为有多个部件,在上传文件的时候,还可以在body中添加其他的数据。json,form。。。一般来说,都是客户端发起multipart/form-data请求 ,服务器进行解析。而且这种东西的编码解码工作一般都是由底层的容器/框架完成。开发根本不必关心。但是我最近遇到了一个需求:服务器响应multipart/form-data(包含

2020-08-26 17:28:09

MyBatis通过TypeHandler自动编解码对象的Json属性

mysql从5.7.版本开始支持json列。它本质上仍然是一个字符串,比起直接用varchar来说,它有专门对于json的的检索,修改方法。更加的灵活。在jdbc规范中,还没json类型的定义。所以对象一般都是用String属性,映射数据库的json列。在存储和读取的时候,需要自己完成json的序列化和反序列化。在使用MyBatis的框架,可以通过定义TypeHandler来自动完成Json属性的序列化和反序列化。演示一个Demo这里使用Gson的JsonElement作为对象的Json属性对象。我

2020-08-17 15:07:47

在SpingBoot中使用Redis对接口进行限流

一个基于Redis实现的接口限流方案,先说要实现的功能可以限制指定的接口,在一定时间内,只能被请求N次,超过次数就返回异常信息可以通过配置文件,或者管理后台,动态的修改限流配置实现的思路使用 Hash 存储接口的限流配置request_limit_config "/api2" : {"limit": 10, "time": 1, "timeUnit": "SECONDS"}hash中的key就是请求的uri路径,value是一个对象。通过3个属性,描述限制策略limit 最多请求次数

2020-08-08 11:21:03

在SpringBoot App中使用GoogleReCaptcha3过滤非法的请求

现在的应用中对于登录,注册,短信验证码。。。这些场景来说,验证码真的是必不可少。随着技术的发展,也使得验证码从当初的图形验证码,发展到今天的滑块,倒立文字点击,数学计算,手势滑动,拼图,刮图。。。等等各种花样,总之一个目的,阻止机器人的访问。验证码这玩意儿,确实给用户带来了很不好的体验,很多应用的验证码确实玄乎的很让人让人抓狂。ReCaptcha这是谷歌的一个验证码程序,它免费,强大,很多世界级别的应用都在使用它(靠谱)。它现在有2个比较流行的版本!!ReCaptcha 2,它长这样这玩意儿,

2020-08-05 22:21:59

在springboot中使用Guava基于令牌桶实现限流

限流说详细了,名堂也多。这种算法那种算法,这种策略那种策略的。没有绝对的银弹。都要结合实际的场景来实现。最简单的,使用Google的Guava,几行代码。就可以优雅的对一个接口完成限流。令牌桶算法通俗的理解就是,有一个固定大小的水桶,水龙头一直按照一定的频率往里面滴水。水满了,就不滴了。客户端每次进行请求之前,都要先尝试从水桶里面起码取出“一滴水”,才能处理业务。因为桶的大小固定,水龙头滴水频率固定。从而也就保证了数据接口的访问流量。Guava谷歌的一个工具库,包含了大量的Java工具类,像has

2020-08-04 21:19:32

springboot jwt redis实现token刷新

使用jwt的好处就是,服务器不需要维护,存储token的状态。服务器只需要验证Token是否合法就行。确实省了不少事儿。但是弊端也显而易见,就是服务器没法主动让一个Token失效,并且给Token指定了exp过期时间后,不能修改。配合redis,就可以轻松的解决上面两个问题token的续约服务器主动失效指定的token接下来,我会演示一个实现Demo初始化一个工程<parent> <groupId>org.springframework.boot</group

2020-08-03 21:40:59

使用spring-validation和@RequestParam(required = false)字符串默认值的校验问题

众所周知,使用@RequestParam(required = false) 封装请求参数的时候,如果客户端不提交参数,或者是只声明参数,并不赋值。那么方法的形参值,默认为null(基本数据类型除外)。一个Controller方法,有2个参数@GetMappingpublic Object update(@RequestParam(value = "number", required = false) Integer number, @RequestParam(value = "phone",

2020-07-29 22:34:47

使用@RequestBodyAdvice处理客户端的加密请求体

业务场景:客户端把json数据进行加密后,编码成Base64字符串,提交给服务器。服务器再进行解密。使用 @RequestBodyAdvice,可以在不修改任何Controller代码的前提下,轻松完成。之前写过一篇帖子,使用@ResponseBodyAdvice统一对响应的数据进行处理。演示了,使用ResponseBodyAdvice统一对响应给客户的json进行AES加密。RequestBodyAdvice 接口这个接口定义了一系列的方法,它可以在请求体数据被HttpMessageConve

2020-07-22 13:51:51

玩儿转spring-data-jpa中jpql的投影查询

投影查询,就是仅仅检索表的部分字段。而不是粗暴的 SELECT * FROM...检索出所有列数据。例如检索用户余额信息的时候,就不需要检索用户的头像,创建日期等字段。节省了带宽传输和内存占用,也避免了可能暴露更多数据给客户端。这里先啰嗦一下jpql的一些注意点操作的是对象 @Entity, 不是表, 操作的是对象属性, 也不是表字段默认Entity名称就是类名称大写, 也可以通过修改 @Entity 属性的注解来修改不支持使用 `` 符号, 不支持在末尾添加分号: ;支持使用 AS 关键字起别

2020-07-16 11:43:15

在SpringBoot中验证用户上传的图片资源

允许用户上传图片资源(头像,发帖)是APP常见的需求,特别需要把用户的资源IO到磁盘情况下,需要防止坏人提交一些非法的文件,例如木马,webshell,可执行程序等等。这类非法文件不仅会导致客户端图片资源显示失败,而且还会给服务器带来安全问题。通过文件后缀判断文件的合法性这种方式比较常见,也很简单,是目前大多数APP选择的做法。public Object upload (@RequestParam("file") MultipartFile multipartFile) throws IllegalS

2020-07-15 21:51:28

Nginx的跨域配置

使用SpringBoot开发前后端分离的应用,可以使用Nginx作为网关来统一解决跨域问题。这种好处是,可以不修改应用代码的情况下,让应用支持跨域。对于很多不支持的跨域的网站,你也可以弄个Nginx给它“加个Buff”,也就可以进行跨域访问了。 ????Nginx配置(这个配置,可以解决 95% 以上的跨域问题)server { listen 80; server_name localhost 127.0.0.1; location / { # 允许跨域请求的“域” ad

2020-07-13 17:16:50

spring-data-jpa中的查询方法

查询方法,就是根据方法名来检索数据。按照一定的规则,通过方法名描述要检索的字段,过滤的条件,排序的策略等等,它们大都以find, get… 等开头。spring-data-jpa会自动解析,并且完成检索。省时省力。在 Repository 中定义查询方法public interface UserRepository extends Repository<User, Long> { // 根据emailAddress和lastname 检索所有的记录 List<User>

2020-07-13 12:43:55

在SpringBoot中使用HikariCP连接池

在SpringBoot中使用HikariCP连接池HikariCP 是一款性能极佳的数据库连接池,体积很小,大约130Kb。SpringBoot2.0也已经采用HikariCP作为默认连接池配置.。HikariCP官方Githubhttps://github.com/brettwooldridge/HikariCP对比各类连接池的基准测试。和Druid比怎么样国内用 Druid的也不少,如果需要在Durid 和 HikariCP之间进行一个选择,可以先参考双方作者之间的一次沟通 。https

2020-07-09 16:30:02

在浏览器中使用js-spark-md5计算文件的MD5

在浏览器中使用js-spark-md5计算文件的MD5最近开发一个视频系统,用户需要把文件上传到服务器。服务器再上传到转码服务器,编码为m3u8格式。我觉得客户端可以直接上传到转码服务器。对转码服务器设置了跨域后,客户端可以直接上传视频文件,但是上传接口需要文件的MD5值,网上找了一个口碑极好的MD5库 js-spark-md5(据说性能是最牛逼的)https://github.com/satazor/js-spark-md5官方的Demodocument.getElementById('file'

2020-07-06 21:55:35

SpringBoot在WebSocket长连接中获取到HttpSession

SpringBoot在WebSocket长连接中获取到HttpSessionWebsocket是通过http协议握手后升级成为长连接,在握手的时候,可以读取到客户端http请求的所有信息,自然也包括 HttpSession。自定义配置类,继承 Configurator ,覆写modifyHandshake方法ServerEndpointConfigImpl.Configurator,提供了一个modifyHandshake方法,可以在完成握手后,读取客户端的请求,以及修改对客户端的响应。Handsha

2020-07-03 14:30:12

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。