Pseudocode 分享技术与思考

除了认证和授权,Spring Security 还提供了哪些安全特性

在 Spring Security 中,提供了一个 HttpFirewall 接口,从它的名字可以看出是作为防火墙使用,其定义如下: public interface HttpFirewall { FirewalledRequest getFirewalledRequest(HttpServletRequest request) throws RequestRejectedException; H...

读懂 `systemd` 的 Unit 配置文件

在使用 systemd 配置系统服务的时候,都是从一个 Unit 配置文件开始的,这篇文章从一个例子入手,来聊一聊怎样看一个服务的 Unit 配置文件。 我们从比较常用的 Nginx 的 Unit 配置文件入手,当在 Linux 系统中通过包管理器安装 Nginx 之后,会自动添加 Nginx 的系统服务配置,要查看 Nginx 的服务配置,可以使用如下的命令: systemctl cat ngi...

`systemd` 中的 Unit 和 Target 是什么?

上一篇(在 Linux 系统中将 Spring Boot 应用作为系统服务运行)介绍了如何使用 systemd 将一个 Spring Boot 工程配置为一个系统服务并随系统启动。对于日常的开发而言,这种部署方式和配置已经很少在新的项目中用到了,但是需要的时候,还是得去查一下用法,下次再用到不知道就到什么时候了,不如这次多了解了解 systemd。 以下是上次用到的服务配置内容: [Unit] D...

在 Linux 系统中将 Spring Boot 应用作为系统服务运行

今天处理一个遗留项目的问题,有一个 Spring Boot 项目部署在一台客户内网的物理服务器上,最近由于一些原因,服务器经常会重启,每次重启后需要手动启动 Spring Boot 的工程,因此我需要将其配置成开启自启动的服务。 完成这件事需要借助 systemd。 它提供了一套系统启动和管理的解决方案。根据惯例,在 Linux 中,d 一般表示守护进程(daemon),比如 httpd 等。 要...

Java 中的 Stack 好纠结~

「栈」是每一个程序员都很熟悉的数据结构,英文叫做 Stack,在 Java 中,栈的实现类是 java.util.Stack。如果你了解 Java 中的 Stack 类,就会知道,这里有一个历史遗留问题: 这 Java 的源码,在注释中,Java 官方并不推荐使用这个 Stack 类,而是更推荐下面的写法: Deque<Integer> stack = new ArrayDeque&l...

HATEOAS 是什么

随着 RESTful API 被越来越多地人接受,它已经被非常广泛地使用,并且,在日常开发中,大部分开发者写的 API 也越来越符合 RESTful 的规范。RESTful 系统设计中有一个重要的特性,就是 用超媒体驱动应用状态(Hypermedia as the engine of application state),也就是 HATEOAS。 先来通俗地介绍一下 HATEOAS。 通常我们开发...

MongoDB 聚合框架使用

ongoDB 的聚合框架是一个非常实用的工具,可以作用在一个或多个集合上,对集合中的数据进行一系列运算,类似于 SQL 的 where、join、group by、limit 等操作,或者 Java 中的 Lambda 操作。 整个剧和运算的过程,可以包含单个操作步骤,也可以包含多个。这一个或多个步骤,组成一个管道,对数据集合进行操作,如下: pipeline = [$stage1, $stage...

解决 Spring 中 Prototype Bean 注入后被固定的问题

根据 Spring 的文档,Spring 中的 Bean 的 Scope 共有 5 种:singleton、prototype、request、session、application、websocket。其中,singleton 是默认值,也是最常用的,除此之外最常用的就是 prototype,其余都很少会用到。 当一个 Singleton 的 Bean,使用 @Autowired 注入一个属性的...

Java 虚拟机加载 Java 类的过程

Java 是一门编译型语言,在完成代码的编写以后,需要使用 Java 编译器将源码编译成 .class 字节码文件,供 Java 虚拟机运行。Java 的源码和字节码都是以类为单位的,在字节码被 Java 虚拟机执行之前,需要将对应的类进行加载。 JVM 加载类的过程主要分为三个步骤:加载、链接和初始化。 加载 加载的过程,就是查找 .class 文件的字节流并创建类的过程。字节流的来源是多样的,...

Spring MVC 级联对象参数校验

相关文章:Spring MVC 是如何对对象参数进行校验的 在上述的这篇文章里,介绍了我们常用的 Spring MVC 的对象参数校验,是怎么完成校验的过程的,这篇来介绍一个更深入的问题。因为上篇中介绍的过程,适用于对象中的属性都是常用的 Java 数据类型,比如基本数据类型或者字符串等,如果这个对象中包含一个其它类型的参数,会怎么样呢? 比如这样的类型: @Data public class U...