Spring Security 的双因素认证
在本教程中,我们将使用软令牌和 Spring Security 实现双因素身份验证功能。我们将把新功能添加到现有的简单登录流程中,并使用 Google Authenticator 应用程序生成令牌。简单地说,双因素身份验证是一个验证过程,遵循众所周知的“用户知道的东西和用户拥有的东西”的原则。因此,用户在身份验证过程中提供了一个额外的“验证令牌”...
JVM、JRE 和 JDK 之间的区别
本文中,我们将通过 JVM、JRE 和 JDK 的组件和用途来讨论它们之间的差异。 Java Virtual Machine (JVM) 是执行 Java 程序的虚拟机的实现。JVM 首先解析字节码。然后,它将类信息存储在存储区中。最后,它执行 java 编译器生成的字节码。它是一台具有自己的指令集的抽象计算机,在运行时操纵各种内存区域。...
Java 基础 - Java 中的控制结构
从最基本的意义上讲,程序是一系列指令。控制结构是编程块,可以改变我们通过这些指令的路径。本文中,我们将探索 Java 中的控制结构。它有三种控制结构:条件分支,用于在两条或多条路径之间进行选择。Java 中有三种类型:if/else/else if、三元运算符和 switch。用于迭代多个值/对象并重复运行特定代码块的循环。Java 中...
Java 基础 - Java main() 方法解析
每个程序都需要一个开始执行的地方;说到 Java 程序,这就是 main 方法。我们习惯于在代码会话中编写 main 方法,以至于我们甚至不注意它的细节。在这篇短文中,我们将分析这种方法,并展示一些其他的编码方法。最常见的 main 方法模板是:public static void main(String[] args) { }这就是...
Spring 与 Spring Boot 之比较
本教程中,我们将研究标准 Spring 框架和 Spring Boot 之间的差异。我们将重点讨论 Spring 的模块,如 MVC 和 Security,在核心 Spring中使用时与在 Boot 中使用时有何不同。Spring 框架为开发 Java 应用提供了全面的基础设施支持。它包含了一些...
Java 使用 Liquibase 安全地演化数据库 schema
本文将向你展示如何使用 Liquibase 来演化 Java web 应用的数据库 schema。首先,我们将研究一个通用的 Java 应用,然后重点介绍一些与 Spring 和 Hibernate 很好集成的有趣选项。当使用 Liquibase 时,我们可以使用一系列变更日志文件来描述数据库 schema 的演变。尽管这些文...
使用 Spring Boot 和 Jmix 快速开发 web 应用
本文中,我们将学习如何使用 Jmix Studio 和 IntelliJ IDEA 的 Jmix 框架。我们将构建一个全栈 MVP 的 Spring Boot 应用,用以跟踪员工费用。从快速设置我们的项目环境到生成响应式 UI 和实现基于角色的访问,我们将看到这个框架如何在保持灵活性的同时加速开发...
持久化 LocalDateTime、ZonedDateTime 以及与 Hibernate 协作
在 Java 8 中引入的日期和时间 API 最终取代了旧的 java.util.Date。日期。它使用起来容易得多,最终提供了表示日期、日期与时间以及仅表示时间信息的单独类。这不仅可以改进您的业务代码,还可以更容易地将它们用作实体属性。至少在你使用的是正确版本的 JPA 和/或 Hibernate 时如此。如果你希望在持久化日期和时间 API 类时使用正确...
使用 Prometheus 监控 Spring Boot 应用
使用 Spring Boot,开发人员可以轻松设置独立的高级应用。然而,为了真正提高性能、可用性和可靠性,集成像 Prometheus 这样的复杂监控工具是关键。本文旨在提供将 Prometheus 与 Spring Boot 应用...
Java 中的 hashCode() 指南
哈希是计算机科学的一个基本概念。在 Java 中,高效的哈希算法支持一些最流行的集合,如 HashMap 和 HashSet。本文中,我们将重点介绍 hashCode() 的工作原理、它在集合中的作用以及如何正确实现它。在某些情况下,对集合进行最简单的操作可能效率低下。为了说明,这会触...