当前位置: 首页 > news >正文

Spring Boot实用小技巧8 - 第530篇

历史文章(文章累计530+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

《国内最全的Spring Boot系列之七》

SpringBoot基本原理,轻松应对面试官 - 第522篇

Spring Boot实用小技巧 -  - 第523篇

Spring Boot实用小技巧2 - 第524篇

Spring Boot实用小技巧3 - 第525篇

Spring Boot实用小技巧4 - 第526篇

Spring Boot实用小技巧5 - 第527篇

Spring Boot实用小技巧6 - 第528篇

Spring Boot实用小技巧7

最近看到一个利用AI生成照片唱歌的视频,点赞1450,评论389,收藏843,如果多几个这样的不错的视频,那么账号不火都难。如果是传统的方式,要制作这样的视频,难度会比较大,现在如果利用AI来实现的话,分分钟的事情:

导读

知道与不知道只隔着一次勇敢的尝试。在技术的领域里,那看似难以跨越的从不知到知的沟壑,或许就藏在一次代码的编写中。当你鼓起勇气,在键盘上敲下那一行行神秘的字符,去尝试实现一个新的功能,去探索一种未曾用过的算法,也许就在那瞬间,你捅破了那层阻隔你与新技术认知的薄纱。

技巧一:Spring Boot 应用 5 种保护绝佳方法

(1)在生产中使用HTTPS

传输层安全性(TLS)是HTTPS的官方名称,你可能听说过它称为SSL(安全套接字层),SSL是已弃用的名称,TLS是一种加密协议,可通过计算机网络提供安全通信。其主要目标是确保计算机应用程序之间的隐私和数据完整性。

过去,TLS / SSL证书很昂贵,而且HTTPS被认为很慢,现在机器变得更快,已经解决了性能问题,Let's Encrypt提供免费的TLS证书,这两项发展改变了游戏,并使TLS成为主流。

(2)使用Snyk检查你的依赖关系

你很可能不知道应用程序使用了多少直接依赖项,这通常是正确的,尽管依赖性构成了整个应用程序的大部分。攻击者越来越多地针对开源依赖项,因为它们的重用为恶意黑客提供了许多受害者,确保应用程序的整个依赖关系树中没有已知的漏洞非常重要。

Snyk测试你的应用程序构建包,标记那些已知漏洞的依赖项。它在仪表板在应用程序中使用的软件包中存在的漏洞列表

此外,它还将建议升级的版本或提供补丁,并提供针对源代码存储库的拉取请求来修复您的安全问题。Snyk还确保在你的存储库上提交的任何拉取请求(通过webhooks)时都是通过自动测试的,以确保它们不会引入新的已知漏洞。

(3)升级到最新版本

基础架构升级通常不如依赖项升级具有破坏性,因为库作者对向后兼容性和版本之间的行为更改的敏感性各不相同。话虽如此,当你在配置中发现安全漏洞时,您有三种选择:升级,修补程序或忽略

在对应用程序进行必要的更改以使用较新版本之后,就应用程序的整体运行状况而言,升级是最安全的。

(4)启用CSRF保护

跨站点请求伪造(Cross-Site Request Forgery )是一种攻击,强制用户在他们当前登录的应用程序中执行不需要的操作。如果用户是普通用户,一个成功攻击可能涉及请求的状态更改,如转移资金或更改其电子邮件地址,如果用户具有提升管理员的权限,则CSRF攻击可能会危及整个应用程序。

Spring Security具有出色的CSRF支持,如果您正在使用Spring MVC的form:form标签或Thymeleaf @EnableWebSecurity,默认情况下处于启用状态,CSRF令牌将自动添加为隐藏输入字段。

(5)使用内容安全策略防止XSS攻击

内容安全策略(CSP)是一个增加的安全层,可帮助缓解XSS(跨站点脚本)和数据注入攻击。要启用它,你需要配置应用程序以返回Content-Security-Policy标题。你还可以在HTML页面中使用标记。

技巧二:Spring Boot配置随机数技巧以及应用场景

Spring Boot支持在系统加载的时候配置随机数。

添加config/random.properties文件,添加以下内容:

#随机32位MD5字符串user.random.secret=${random.value}#随机int数字user.random.intNumber=${random.int}#随机long数字user.random.longNumber=${random.long}#随便uuiduser.random.uuid=${random.uuid}#随机10以内的数字user.random.lessTen=${random.int(10)}#随机1024~65536之内的数字user.random.range=${random.int[1024,65536]}

具体的生成细节可以参考Spring Boot的配置类:

org.springframework.boot.env.RandomValuePropertySource

其实就是使用了 Java 自带的 java.util.Random 和 java.util.UUID 等工具类,实现很简单,这里就不再详细解析了,大家可以自己去看下这个类的实现。

具体的应用场景:

(1)动态端口号配置:在开发和测试中,可以用随机端口号来避免端口冲突。例如,在 application.properties 中使用 ${random.int[10000, 20000]} 来为应用分配一个随机端口,这样多个实例可以在不同的端口上运行。

(2)唯一 ID 生成:可以用于生成唯一的应用实例 ID,适用于需要分布式标识的场景,如分布式缓存的标识配置等。

(3)密码、密钥等敏感信息的生成:在开发和测试环境中,可以用随机数生成临时密码、密钥等。例如,配置一个随机密码用来保护应用的敏感接口。

(4)模拟测试数据:通过随机数为测试环境生成一些假数据,适用于自动化测试、性能测试等场景。

(5)服务实例的标识与负载均衡:可以用随机数给服务实例生成不同的标识,特别是微服务架构中,随机标识可以用于注册和发现服务,实现基本的负载均衡。

技巧三:Spring Boot 运行应用的 3 种方式

运行 Spring Boot 应用的 3 种方式:

(1)在 IDE 中运行

在 Eclipse、IDEA 中直接运行,又有以下两种方式。

方式一:jar 包方式

Spring Boot默认采用 jar 包内嵌 Tomcat、Jetty 等 Server 的方式,并需要提供一个含有 main方法的主类。这个时候,直接在 IDE 中运行这个 main 方法就能启动 Spring Boot 应用了。

方式二:war 包方式

如果你的应用改装成了 war 包方式部署,这个时候就需要在 IDE 中配置 Server,然后在 Server 中加入你的 Spring Boot 项目,最后运行这个 Server 即可。

如何改装成 war 包方式运行可以关注公众号《SpringBoot》,

回复关键词:[453],查看文章:

《SpringBoot引入外部jar包,项目打包成war包发布(亲测有效) - 第453篇》

回复关键词[452],查看文章:

《SpringBoot添加外部jar包及打包(亲测有效) - 第452篇》

(2)打包运行

当你的 Spring Boot 准备提测或者上线,都需要打成 jar 包或者 war 包运行,war 包方式这里不说直接丢到 Server 里面运行即可,这里介绍直接运行 jar 包的方式。

$ java -jar javastack-0.0.1-SNAPSHOT.jar

这种方式也支持开启远程调试,如:

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar javastack-0.0.1-SNAPSHOT.jar

(3)用插件运行

可以在 IDE 或者命令行中使用 Maven 和 Gradle 插件来运行 Spring Boot 应用。

方式一Maven Plugin:$ mvn spring-boot:run

方式二Gradle Plugin:$ gradle bootRun

技巧四:返回XML数据

如何返回 XML 格式数据呢?其实很简单!

使用依赖包:jackson-dataformat-xml

1)定义返回方式

在 Controller 类上面用 @RestController 定义或者在方法上面用 @ResponseBody 定义,表明是在 Body 区域输出数据。

2)定义返回类型

此时 Content-Type 默认为 application/xhtml+xml;charset=UTF-8 格式,可以手动改变下类型:application/xml;charset=UTF-8。

@RequestMapping(value = "/test" produces = MediaType.APPLICATION_XML_VALUE)

表明是用 application/xml 格式输出数据。

3)定义输出格式

控制层方法直接返回对象,对象会自动转换为 XML 格式,不过是默认的标签,可以通过以下标签进行自定义 XML 格式。

@JacksonXmlRootElement(localName = "response")public class UserXmlVO {  @JacksonXmlProperty(localName = "user_name")  private String name;  @JacksonXmlElementWrapper(useWrapping = false)  @JacksonXmlProperty(localName = "order_info")  private List<OrderInfoVO> orderList;  // get set 略}

技巧五:Spring Boot 配置加载顺序

如果加载的配置有重复的,它们的加载顺序是这样的,数字越小的优先级越高,即优先级高的覆盖优先级低的配置。

  1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).

  2. @TestPropertySource annotations on your tests.

  3. @SpringBootTest#properties annotation attribute on your tests.

  4. Command line arguments.

  5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)

  6. ServletConfig init parameters.

  7. ServletContext init parameters.

  8. JNDI attributes from java:comp/env.

  9. Java System properties (System.getProperties()).

  10. OS environment variables.

  11. A RandomValuePropertySource that only has properties in random.*.

  12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

  13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)

  14. Application properties outside of your packaged jar (application.properties and YAML variants).

  15. Application properties packaged inside your jar (application.properties and YAML variants).

  16. @PropertySource annotations on your @Configuration classes.

  17. Default properties (specified using SpringApplication.setDefaultProperties).

对应的中文说明:

1、开发者工具 `Devtools` 全局配置参数;

2、单元测试上的 `@TestPropertySource` 注解指定的参数;

3、单元测试上的 `@SpringBootTest` 注解指定的参数;

4、命令行指定的参数,如 `java -jar springboot.jar --name="Java技术栈"`;

5、命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar`

6、`ServletConfig` 初始化参数;

7、`ServletContext` 初始化参数;

8、JNDI参数(如 `java:comp/env/spring.application.json`);

9、Java系统参数(来源:`System.getProperties()`);

10、操作系统环境变量参数;

11、`RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`;

12、JAR包外面的配置文件参数(`application-{profile}.properties(YAML)`)

13、JAR包里面的配置文件参数(`application-{profile}.properties(YAML)`)

14、JAR包外面的配置文件参数(`application.properties(YAML)`)

15、JAR包里面的配置文件参数(`application.properties(YAML)`)

16、`@Configuration`配置文件上 `@PropertySource` 注解加载的参数;

17、默认参数(通过 `SpringApplication.setDefaultProperties` 指定);

知道了它们的加载顺序,我们就能知道从哪一步来替换配置。

历史文章(文章累计530+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

《国内最全的Spring Boot系列之七》

五音不全也浪漫,521清华学霸为爱人写歌 - 第513篇

一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭  - 516篇

Spring的SmartLifecycle可以没用过,但没听过就不好了!- 第517篇

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇

SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 -  第520篇

SpringBoot多例模式,在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG!!- 521篇

SpringBoot基本原理,轻松应对面试官 - 第522篇

Spring Boot实用小技巧 -  - 第523篇

Spring Boot实用小技巧2 - 第524篇

Spring Boot实用小技巧3 - 第525篇

Spring Boot实用小技巧4 - 第526篇

万物皆能舞,AI让你秒变“舞”林高手 – Viggle AI“舞”所不能

法定年龄退休2024年新规,我要到63岁才能退休了,看看你几岁退休,附退休对照表

Suno新上线Covers翻唱新 - 实现音频风格任意转换

Spring Boot实用小技巧5 - 第527篇

Spring Boot实用小技巧6 - 第528篇

又一款AI对口型神器,让照片开口说话唱歌,1分钟教会(附保姆级教程)

Spring Boot实用小技巧7


http://www.mrgr.cn/news/60381.html

相关文章:

  • es kibana 增加索引字段
  • 已经安装好Ubuntu,10分钟配好Anaconda3
  • WPF+MVVM案例实战(二)-自定义按钮实现(带图片文字虚线实线边框切换)
  • Linux | Rsync 命令:16 个实际示例(下)
  • Javaee---多线程(一)
  • 哈希表之哈希数组、HashSet
  • 北京本盛数字科技有限公司-持续深耕AI智能化健康管理领域
  • nginx------HTTP模块配置详解
  • [论文笔记] 大模型评测:lm-evaluation-harnessPublic(eval-big-refactor)
  • 在 Gitee 或 GitCode 上克隆 Dify 项目源码并启动 Docker 环境
  • C++二级 求每个单词的长度的3种解决办法(包括find、substr)
  • 盛元广通食检中心实验室信息化LIMS系统
  • 大语言模型推理源码解读(基于llama3模型:来源github)
  • 做梦都想拥有的陪伴对象,AI居然免费帮我实现了...文中附送体验地址!
  • autMan奥特曼机器人-内置容器安装依赖报错:externally-managed-environment
  • 深度学习中的损失函数
  • # centos6.5 使用 yum list 报错Error Cannot find a valid baseurl for repo bas 解决方法
  • 3500多万家专利数据存入Mysql数据库
  • 本地服务器上搭建PPTist轻松实现跨地域的在线PPT制作与演示
  • Spring Cloud Alibaba实战入门之Nacos注册中心(四)
  • 我国金融科技人才培养情况
  • 电动机轴承发热的原因以及补充和更换油脂的经验
  • 基于Spring Boot的在线摄影工作室开发指南
  • 《链表篇》---环形链表
  • Python 中的 @ 符号是如何工作的!
  • Android 应用申请 Google MBA权限