https://javatutorial.net/introduction-to-spring-security-and-how-to-to-set-up

在本教程中,您将学习如何使用 Spring Security 来保护 Web 应用程序的安全,包括用户身份验证,授权等。

Spring Security 简介及其设置 - 图1

Spring Security 简介

Spring Security 是一个可定制的身份验证框架。 在保护基于 Spring 的应用程序时,这是标准。 它提供身份验证和授权。 授权也称为“访问控制”。

Spring Security 的核心构建块

  1. SecurityContextHolder:将当前SecurityContext与当前执行线程相关联。 它包含当前正在与应用程序交互的SecurityContext的信息。 安全上下文信息存储在ThreadLocal对象中,该对象可用于当前线程中运行的所有成员。
  2. SecurityContext:接口,用于定义与当前执行线程关联的最小安全信息。 换句话说,它包含身份验证对象和特定于请求的安全性信息。
  3. 身份验证:表示身份验证请求所需的令牌。 一旦请求通过身份验证,令牌通常将存储在由SecurityContextHolder管理的线程本地SecurityContext中。 用户身份验证之后,将使用UserDetails对象构建Authentication对象,然后将其存储在SecurityContextHolder中。
  4. UserDetails:提供有关用户的核心信息。
  5. UserDetailsService:加载特定的用户数据。 它是一个接口,允许从数据库加载与用户相关的信息。 该接口仅需要一种只读方法,从而简化了对新数据访问策略的支持。
  6. GrantedAuthority:通常由UserDetailsService加载。 表示授予身份验证对象的权限。

认证方式

身份验证(如前所述)表示与应用程序交互的主体信息(用户,设备,外部系统等)。 处理用户身份验证时,将从传入请求中检索用户名和密码,然后将其作为UsernamePasswordAuthenticationToken的实例。 然后将此令牌传递给AuthenticationManager,该管理器针对数据库中的主体身份验证主体身份。 如果身份验证成功,则AuthenticationManager返回存储主体详细信息的身份验证对象。 最后,在SecurityContextHolder方法的帮助下,将身份验证对象填充到安全上下文中。

让我们看一下AuthenticationManager界面的外观:

  1. public interface AuthenticationManager {
  2. Authentication authenticate(Authentication authentication)
  3. throws AuthenticationException;
  4. }

如您所见,它只有一种方法。 但是,这一方法可以用来完成三件事:

  1. 返回身份验证(请参阅上面的文本)
  2. 抛出AuthenticationException
  3. 返回null

AuthenticationManager通常用作ProviderManager的实现,然后将其委派给AuthenticationProvider实例链。AuthenticationProviderAuthenticationManager非常相似,只是它有另外一种方法:

  1. public interface AuthenticationProvider {
  2. Authentication authenticate(Authentication authentication)
  3. throws AuthenticationException;
  4. boolean supports(Class<?> authentication);
  5. }

Spring Security 简介及其设置 - 图2

授权书

授权的工作是确定是否允许用户访问给定的资源,换句话说,是否具有许可权。 在此阶段,Spring 为我们提供了授权组件,称为 AccessDecisionManager。 这对我们有帮助,是为我们提供了 API。

多亏了 AOP,我们可以实现授权。 AOP 决定是否允许调用该方法的用户进行方法调用。

如何在 Spring 应用程序中设置 Spring Security

在 Maven pom.xml文件中,粘贴以下内容:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.security</groupId>
  4. <artifcatId>spring-security-web</artifactId>
  5. <version>4.2.3</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.security</groupId>
  9. <artifactId>spring-security-config</artifactId>
  10. <version>4.2.3</version>
  11. </dependency>
  12. </dependencies>