https://javatutorial.net/introduction-to-spring-security-and-how-to-to-set-up
在本教程中,您将学习如何使用 Spring Security 来保护 Web 应用程序的安全,包括用户身份验证,授权等。

Spring Security 简介
Spring Security 是一个可定制的身份验证框架。 在保护基于 Spring 的应用程序时,这是标准。 它提供身份验证和授权。 授权也称为“访问控制”。
Spring Security 的核心构建块
SecurityContextHolder:将当前SecurityContext与当前执行线程相关联。 它包含当前正在与应用程序交互的SecurityContext的信息。 安全上下文信息存储在ThreadLocal对象中,该对象可用于当前线程中运行的所有成员。SecurityContext:接口,用于定义与当前执行线程关联的最小安全信息。 换句话说,它包含身份验证对象和特定于请求的安全性信息。- 身份验证:表示身份验证请求所需的令牌。 一旦请求通过身份验证,令牌通常将存储在由
SecurityContextHolder管理的线程本地SecurityContext中。 用户身份验证之后,将使用UserDetails对象构建Authentication对象,然后将其存储在SecurityContextHolder中。 UserDetails:提供有关用户的核心信息。UserDetailsService:加载特定的用户数据。 它是一个接口,允许从数据库加载与用户相关的信息。 该接口仅需要一种只读方法,从而简化了对新数据访问策略的支持。GrantedAuthority:通常由UserDetailsService加载。 表示授予身份验证对象的权限。
认证方式
身份验证(如前所述)表示与应用程序交互的主体信息(用户,设备,外部系统等)。 处理用户身份验证时,将从传入请求中检索用户名和密码,然后将其作为UsernamePasswordAuthenticationToken的实例。 然后将此令牌传递给AuthenticationManager,该管理器针对数据库中的主体身份验证主体身份。 如果身份验证成功,则AuthenticationManager返回存储主体详细信息的身份验证对象。 最后,在SecurityContextHolder方法的帮助下,将身份验证对象填充到安全上下文中。
让我们看一下AuthenticationManager界面的外观:
public interface AuthenticationManager {Authentication authenticate(Authentication authentication)throws AuthenticationException;}
如您所见,它只有一种方法。 但是,这一方法可以用来完成三件事:
- 返回身份验证(请参阅上面的文本)
- 抛出
AuthenticationException - 返回
null
AuthenticationManager通常用作ProviderManager的实现,然后将其委派给AuthenticationProvider实例链。AuthenticationProvider与AuthenticationManager非常相似,只是它有另外一种方法:
public interface AuthenticationProvider {Authentication authenticate(Authentication authentication)throws AuthenticationException;boolean supports(Class<?> authentication);}

授权书
授权的工作是确定是否允许用户访问给定的资源,换句话说,是否具有许可权。 在此阶段,Spring 为我们提供了授权组件,称为 AccessDecisionManager。 这对我们有帮助,是为我们提供了 API。
多亏了 AOP,我们可以实现授权。 AOP 决定是否允许调用该方法的用户进行方法调用。
如何在 Spring 应用程序中设置 Spring Security
在 Maven pom.xml文件中,粘贴以下内容:
<dependencies><dependency><groupId>org.springframework.security</groupId><artifcatId>spring-security-web</artifactId><version>4.2.3</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>4.2.3</version></dependency></dependencies>
