Spring Security ACL 核心概念和组件
Spring Security 提供了一个 ACL 模块,也就是 Access Control List,用来做访问控制。 目的是解决 谁对什么资源有什么权限 的问题。 这里的重点是具体的资源。
面临的问题
我们通过 Spring Security 的 WebSecurityConfigurerAdapter.configure(HttpSecurity)
方法,
对 HttpSecurity
对象进行配置,只能精确到 API 层面,决定拥有哪些权限的用户可以访问哪些 API,
但是对于哪些用户对一个具体的资源有访问权限却无能为力。
你的 docker stop,它优雅吗?
我们平时在使用 Docker
的时候,一般会使用 ctrl+c
或者 docker stop
的方式关闭容器。
但有时候我们可能会遇到 ctrl+c
不生效,或者 docker stop
之后要等待 10s 的情况,就像这样:

也许你会觉得 10s 是一个可以忍受的时间, 但这样的问题真的只有 10s 这么简单吗? 为什么有的时候不能立即关闭容器呢?
Spring Security 的权限验证
在前面的文章里,我们对 Spring Security 进行权限验证的组件有了大致的了解,我们首先来回顾并探究一下细节。

FilterSecurityInterceptor
这是 AbstractSecurityInterceptor
的一个子类,并且实现了 Filter
接口,负责调用父类的 beforeInvocation()
、afterInvocatio()
和 finallyInvocation()
方法以及一些 Servlet 相关的工作。
真正处理权限验证的代码,其实在父类中。
它存在的意义就是为了能在 Filter
中进行权限验证。
Spring Security 中的身份认证
本文介绍 Spring Security 的身份认证的内容,研究 Spring Security 自带的身份认证方式和添加自己的身份认证方式的方法。
身份认证相关组件
在上一篇文章中,我们了解到了 Spring Security 会将 DelegatingFilterProxy
插入到 Servlet Filter Chain 中,然后将要过滤的请求通过 FilterChainProxy
代理给匹配的 SecurityFilterChain
;这些 SecurityFilterChain
中包含着真正做安全相关工作的 Filter
。
Spring Security Servlet 概览
Spring Security 是 Spring 框架中用于实现 Security 相关需求的项目。我们可以通过使用这个框架来实现项目中的安全需求。
今天这篇文章将会讨论 Spring Security Servlet 是如何工作的。
之所以将内容限定到 Servlet,是因为现在 Spring Security 已经开始支持 Reactive Web Server,因为底层的技术不同,当然需要分开讨论。
使用 Gradle 的 Java 插件构建 Java 项目
在上一篇文章中,我们在没有使用任何插件的情况下,练习了使用 Gradle
构建 Java
项目,最后得到一个脆弱的构建脚本和不符合约定的目录结构。
对此,Gradle
使用了插件来解决这些问题。
插件
Gradle
中的插件,可以给我们带来很多好处,包括: