在我们了解深度理解之前,我们必须了解主要组成部分是什么。无论后一个版本如何变化以及如何打包它,实际上,底层都是在下面的核心组件周围操作的。
最基本的对象是。我们存储了应用程序的当前详细信息,包括当前应用程序主体的详细信息。默认,用于存储这些详细信息,这意味着同一执行线程中的方法始终是即使没有明确将其作为参数转换给这些方法。您不必担心。
某些应用程序并不完全适合,因为它们具有处理线程的特定方法。例如,Swing客户端可能希望Java虚拟机中的所有线程都使用相同的安全性上下文。您可以配置策略来指定您要如何存储启动时上下文。对于独立应用程序,您可以使用策略。其他应用程序可能希望使用安全线程使用相同的安全性标识。这是通过使用实现的。您可以更改默认模式。有两种方法可以实现。第一个是设置系统属性,第二个是静态方法。大多数应用程序不需要更改默认值,但是如果您需要更改,请检查Javadoc以了解更多信息。
在中间,我们存储了当前应用程序主体的详细信息。SpringSecurity使用对象来表示信息。通常,您不需要自己创建对象,但是用户的查询对象很常见。您可以使用应用程序中任何地方的以下代码块 - 获取已经认证的用户的名称,例如:
返回对象是接口的实例。这是保留线程的本地存储的对象。正如我们将在下面看到的,Spring Security中的大多数身份验证机制都返回一个实例作为主题。
上述代码片段中需要注意的另一个项目是您可以从对象中获得主体。主体只是一个对象。大多数时间可以将其转换为对象。它是一个核心接口Spring Security.it代表主题,但可以扩展和特定应用程序。在您自己的用户数据库和所需的弹簧安全性之间访问适配器。作为您自己的用户数据库的表示,您通常将应用程序转换为应用程序提供的原始对象,以便您可以调用业务方法(例如,等)。
现在您可能想知道,我什么时候可以提供对象?我该怎么做?我记得您说过这东西是声明性的,我不需要编写任何Java代码 - 正在调用什么?
这是在春季安全性中为用户加载信息的最常见方法。当需要用户信息时,您将在整个框架中看到它的使用。
在成功的身份验证中,它用于构建存储在其中的对象(以下将详细介绍)。好消息是我们提供了很多实现,其中一种使用内存映射(),另一个使用JDBC(。
淆经常会有一些混乱。它纯粹是用户数据的DAO。除了提供框架中其他组件的数据外,它没有执行其他功能。特别是,它不会验证已完成的用户。在许多情况下,如果您需要自定义身份验证过程,则更有意义。
除主题外,另一种提供提供的重要方法。该方法提供了一个对象数组。被授予的权限是该主题的许可,这并不奇怪。这些权限通常是“角色”,例如或这些角色。将配置为Web授权,方法授权和域对象授权。SpringSecurity的其他部分可以解释这些权限并期望它们出现。通常加载了授权权限。
通常,对象是应用程序范围的权限。它们不是特定于给定域对象的特定权限。因此,您不能拥有委托许可证,因为如果有数万个权限,您将迅速耗尽内存(或,,,,至少需要很长时间才能验证用户)。当然,弹簧安全是专门为处理这一共同需求而设计的,但是您应该使用项目的域对象安全功能来实现此目标。
回顾过去,我们目前看到的弹簧安全的主要构造模块是:
通过上面的引言,我们了解了这些组件的含义,让我们进一步理解特定的身份验证过程。
让我再次介绍
春季安全性可以参与许多不同的身份验证环境。尽管我们建议人们使用弹簧安全性进行身份验证,而不是与现有的集装箱管理身份验证集成,但仍然受支持 - 就像与您自己的身份验证系统集成一样。
让我们考虑每个人都熟悉的标准身份验证方案。
1.提示用户可以使用用户名和密码登录。
2.系统(成功)对用户名密码的验证是正确的。
3.获取用户的上下文信息(其角落列表等)。
4.为用户建立安全的竞赛。
5.用户继续执行某些操作,可以受到访问控制机制的保护。该机制检查当前安全上下文信息检查操作所需的权限。
前四个项目构成了身份验证过程,因此我们将看到这些过程如何在弹簧安全中发生。
1.在用户名和密码中获取一个实例并组合(接口的实例,我们之前已经看到了)。
2.验证传递给令牌的实例。
3.当身份验证成功时,返回一个完全填充的实例。
4.可以通过致电并将其传递给认证对象来确定安全环境。
到目前为止,用户被认为可以通过身份验证。LET以某些代码为例。
通过切换不同的用户来验证返回的信息:
??请注意,我们通常不需要编写任何此类代码。此过程通常是内部执行的,例如在Web身份验证过滤器中。我们在此处包含的代码表明,Spring Security确切地构成了身份验证的问题,一个相当简单的答案。当完全填充的身份验证对象时,对用户进行了验证。
实际上,春季安全并不介意您如何将对象放入中国。唯一的关键要求是,需要授权一个人(我们将在以后看到更多信息)在操作前表达对主题的身份验证。
您可以(许多用户这样做)来编写自己的过滤器或MVC控制器,以提供不基于不基于Spring Security的身份验证系统的互操作性。可以从ThreadLocal或JNDI访问。您可以在具有预测的身份验证系统的公司工作。该系统是您几乎无法控制的企业的“标准”。在这种情况下,使Spring Security工作并仍然提供授权功能很容易。您需要做的就是编写过滤器(或等效的内容)。它从一个位置读取第三方用户信息,构建特定的弹簧安全对象,然后将其放入。在这种情况下,您还需要考虑通常通过构建的 - 身份验证基础结构自动处理的自动处理。例如,您可能需要提前创建HTTP会话以缓存缓存请求的上下文,然后再编写对客户端的响应。
原始:https://juejin.cn/post/7098566341879054