在正常情况下,当我们使用Spring Security时,我们使用Spring Security随附的登录方案,配置登录接口,配置登录参数,然后配置登录回调。这种用法可以被视为最佳实践!
但!
总会有一些奇怪的需求,例如想要自定义登录和编写逻辑逻辑,例如shiro。如果我想实现这个问题,该怎么办?今天兄弟歌会与您分享。
兄弟歌曲考虑了这一点,并希望在春季安全性中自定义逻辑逻辑。我们有两个想法,但是这两个想法在底部实现。让我们一起看看。
前面的兄弟歌曲分享了春季安全视频:
该视频主要是与您分享,我们实际上可以使用httpservletrequest完成系统登录。这实际上是Javaee的常态。尽管这种登录方法不受欢迎,但很有趣!
然后,我还与您分享了一个视频:
该视频实际上是在谈论HttpservletRequest逻辑的实现,或者说是Httpservlequest提供的弹簧安全性,以及HttpservletRequest提供的弹簧安全性根据其自己的实现将其重写。
有了这两个储备知识,第一个DIY春季安全登录计划即将发布。
让我们看一下特定的操作。
首先,让我们创建一个Spring Boot项目,并介绍Web和Security的两个依赖性,如下所示::
便利,我们在应用程序中配置默认用户名密码。
接下来,我们为登录接口发布SecurityConfig:
登录接口是,一段时间以后,我们是自定义的逻辑,我们将研究它:
直接调用httpservletrequest#登录方法,然后传递用户名和密码以完成登录操作。
最后,我们提供了另一个测试接口,如下:
只是这个!
启动项目,我们首先访问接口,并且访问失败。接下来,我们访问接口以执行登录操作,如下所示:
登录成功后,转到访问界面,您可以在此时访问成功。
这很容易吗?登录成功后,未来的授权和其他操作仍然是原始写作。
上面的登录方法的原理实际上是在开始时引入了歌曲兄弟。如果您不熟悉,可以看到这两个视频:
我也在这里说一点。
这
看得到:
此方法在身份验证后返回身份验证对象。
这是登录方法的实现逻辑。
Servlet3SecurityContextrawarereQuestWrapper类还重写了httpservletrequest#authenticate方法。这也是一种认证方法:
可以看出,该方法用于确定用户是否已经完成了身份验证操作,返回返回,说用户已经完成了认证,并返回false以说用户尚未完成认证工作。
在阅读了上述原则分析后,每个人都应该理解第二个解决方案,即不使用httpservletrequest#登录方法。我们直接致电AuthenticationManager进行登录验证。
让我们来看看。
首先,我们修改配置类如下:
下一步提供登录接口:
在登录接口中,传递用户名和密码以及其他参数,然后将参数(例如用户名和密码)封装到用户名Passpasswordauthenticationtoken对象中。最后,调用AuthenticationManager#身份验证方法进行验证。身份验证对象存储在SecurityContexTholder中。
配置完成后,重新启动项目并执行登录测试。
第二个解决方案与第一个方案相同。第二个实际上是拉出底层并重新实现。
好吧,我今天将介绍两个春季安全性DIY登录计划。这些解决方案可能不常用于工作中,但是对于每个人都了解春季安全原则仍然非常有帮助。有兴趣的朋友可以敲打它来尝试它。哦?
此外,如果您觉得阅读本文很困难,则可以在公共帐户的背景中回复,并查看春季安全系列中的其他文章。这有助于理解本文。当然,您还可以看Songge的新书:
《春季安全》一书已由Tsinghua大学出版社正式出版。有兴趣的合作伙伴在这里戳戳 - > - > - > - 闪闪发光的弹簧安全性,一本书学习了春季安全性。
