Spring Security简介及设置方法

时间:2020-02-23 14:29:28  来源:igfitidea点击:

在本教程中,我们将学习如何使用springsecurity保护web应用程序,包括用户身份验证、授权等。

Spring安全-简介

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

Spring安全的核心构件

*SecurityContextHolder:*将当前SecurityContext与当前执行线程关联。它保存当前与应用程序交互的SecurityContext的信息。安全上下文信息存储在一个 ThreadLocal对象中,该对象对当前线程中运行的所有成员都可用。

SecurityContext:定义与当前执行线程关联的最低安全信息的接口。换句话说,它持有Authentication对象并请求特定的安全信息。

*身份验证:*表示身份验证请求所需的令牌。一旦请求经过身份验证,令牌通常存储在SecurityContextHolder管理的线程本地SecurityContext中。在用户身份验证之后,使用UserDetails对象构建身份验证对象,然后将其存储在SecurityContextHolder中。

*UserDetails:*提供有关用户的核心信息。

*UserDetailsService:*加载特定的用户数据。它是一个允许从数据库加载用户相关信息的接口。该接口只需要一个只读方法,简化了对新数据访问策略的支持。

*GrantedAuthority:*通常由UserDetailsService加载。表示授予身份验证对象的权限。

认证

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

让我们看看AuthenticationManager接口是什么样子的:

public interface AuthenticationManager {

Authentication authenticate(Authentication authentication)
  throws AuthenticationException;

}

如我们所见,它只有一个方法。然而,这一方法可以用来完成三件事:

返回身份验证(请参阅上面的文本)

引发AuthenticationException

返回空

AuthenticationManager通常为ProviderManager提供一个实现,然后由它委托给一系列AuthenticationProvider实例。AuthenticationProviderAuthenticationManager非常相似,只是它多了一个方法:

public interface AuthenticationProvider {

	Authentication authenticate(Authentication authentication)
			throws AuthenticationException;

	boolean supports(Class<?> authentication);

}

授权

授权的任务是决定是否允许用户访问给定的资源,换句话说,他是否有权限。在这个阶段,Spring为我们提供了一个名为AccessDecisionManager.Authorization组件,它帮助我们提供了一个API。

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

如何在Spring应用中设置Spring安全性

在Mavenpom.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>