首页 > 图灵资讯 > 技术篇>正文

六大Spring Security核心组件

2023-03-29 15:11:36

Spring Security是一种可以为基础的能力 Spring 企业应用系统提供声明式安全访问控制解决方案的安全框架。它提供了一组Bean,可以在Spring应用程序的上下文中配置为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。这些功能的实现离不开这六大Spring 核心组件Security。

一、SecurityContext

security安全检索上下文内容,验证信息存储通过验证后 在Securitycontext中。Securitycontext接口只定义了两种方法。事实上,它的主要功能是获取Authentication对象

二、SecurityContextHolder

Securitycontextholder是一个holder,用于hold住securitycontext的例子。用户在典型的web应用程序中登录一次,然后通过会话ID进行识别。服务器缓存持续时间会话的主要信息。Spring 在Security中,在请求之间存储Securitycontext的责任落在Securitycontextersentersenter上。默认情况下,上下文将上下文存储为HTTP请求之间的HTTPSession属性。它将恢复上下文Securitycontextholder的每个请求,最重要的是在请求完成时删除securitycontextholder。Securitycontextholder是一个类别,他的功能方法是静态的。

Securitycontextholder可以设置指定的JVM策略(Securitycontext的存储策略),有三种策略:

1.MODE_THREADLOCAL:SecurityContext 存储在线程中。

2.MODE_INHERITABLETHREADLOCAL:SecurityContext 存储在线程中,但子线程可以在父线程中获得 SecurityContext。

3.MODE_GLOBAL:SecurityContext 所有线程都是一样的。

默认情况下,SecuritycontextHolder使用MODE_THREADLOCAL模式,即存储在当前线程中。

  • Authentication

authentication 直译过来是“认证”Spring的意思 Security Authentication用于表示当前用户是谁,一般来说,你可以理解authentication是一组用户名密码信息。Authentication也是一个接口。

接口有分别获取四种get方法。

1.Authorities, 填写用户角色信息。

2.Credentials,直译,证书。密码填写。

3.Details ,用户信息。

4.Principal ,它填充了用户名。

因此,可以推断,实际上有这样的现类四个属性。这些方法的作用如下:

getAuthorities: 获取用户权限,通常获取用户的角色信息。

getCredentials: 获取证明用户认证的信息,通常是密码和其他信息。

getDetails: 获取用户的额外信息(这部分信息可以是我们用户表中的信息)

getPrincipal: 获取用户身份信息,在未经认证的情况下获取用户名,在认证的情况下获取用户名 UserDetails (Userdetails也是一个接口,其中包括getusername、getpassword等。).

isAuthenticated: 获取当前 Authentication 是否已经认证。

setAuthenticated: 设置当前 Authentication 是否已认证(true or false)。

  • UserDetailsService

提到了Userdetails必须提到Userdetailsservice, Userdetailservice也是一个界面,loaduserbyusername只有一种方法。他可以用来获得Userdetails。

通常在spring 在security应用中,我们将定制一个customuserdetailsservice,实现userdetailservice接口和publice接口 UserDetails loadUserByUsername(final String login);方法。当我们实现loaduserbyusername方法时,我们可以通过查询数据库(或缓存或其他存储形式)获取用户信息,然后组装成userdetails(通常是org).springframework.security.core.userdetails.User,它继承自Userdetails。 并返回。

在实现loaduserbyusername方法,如果我们没有通过查库找到相关记录,我们需要抛出一个异常来告诉spring security来了“善后”。这种异常是org.springframework.security.core.userdetails.UsernameNotFoundException。

五、UserDetails

UserDetails,看命知义意味着用户信息。它存储用户信息接口方法如下:

getAuthorites:获取用户权限本质上是用户的角色信息。

getPassword: 获取密码。

getUserName: 获取用户名。

isAccountNonExpired: 账户是否过期。

isAccountNonLocked: 账户是否被锁定。

isCredentialsNonExpired: 密码是否过期。

isEnabled: 账户是否可用。

  • AuthenticationManager

AuthenticationManager 其功能是验证Authentication,如果验证失败,将抛出Authenticationexception异常。Authenticationexception是一个抽象类,因此代码逻辑不能实例化Authenticationexception异常和抛出,实际抛出的异常通常是实际类别,如disabledexception,LockedException,BadCredentialsexception等。BadCredentialsexception可能更常见,即密码错误。

六大Spring Security核心组件只有相辅相成,共同运作才能促进Spring Security实至名归的安全框架!

上一篇 2020最新java框架面试题(附答案)
下一篇 20款免费且实用的Eclipse插件

文章素材均来源于网络,如有侵权,请联系管理员删除。