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

科技   2024-10-29 08:31   福建  

历史文章(文章累计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


SpringBoot
Suno AI制作音乐,Viggle AI - 照片跳舞,AI音乐,Noisee AI制作MV。Spring Boot技术。博客已有400+,文章特色:一个知识点一个系列、让技术变得简单、文章轻松幽默,悟纤和师傅趣谈更是轻松有趣。
 最新文章