深入理解Spring Security:认证机制解析

深入理解Spring Security:认证机制解析

在这篇文章中,我们将解析Spring Security的神奇之处,并理解认证机制的实际运作,通过了解Spring Security的基本要素,我们将涉及一些重要的概念。首先,Spring Security如何自举以开始执行任何工作。其次,它如何进行身份验证并确定用户是谁。通过这篇文章,你将揭开神秘的面纱。你将完全了解Spring Security是如何运作的,并且你也将做好准备。来实现一些中级的认证机制。

好的,让我们从了解Spring Security如何开始其工作的第一部分开始吧。你不会调用Spring Security,也不会调用它的API。你需要将Spring Security的起步依赖项添加到你的Spring Boot项目中,框架会立即开始处理请求。它是如何做到的呢?Spring Security将一个过滤器添加到你的应用中来处理请求。如果你不知道,过滤器实际上是Servlet规范中的一种构造,它允许你拦截请求。

假设你有一个请求需要分派给某个Servlet,但你可以创建一系列过滤器,并在请求到达Servlet之前让它经过这些过滤器。过滤器有机会在请求到达Servlet之前对其进行任何处理或操作,并且实际上,它甚至可以阻止某些请求达到Servlet。通常情况下,URL和Servlet方法之间是一对一的映射关系。一个URL通常由一个Servlet方法处理,但是过滤器可以应用于广泛的URL范围。

例如,你可以说,将此过滤器映射到所有以admin开头的用户,或者例如,将此过滤器应用于应用程序中的所有用户。因此,在Web应用程序的情况下,这就是Spring Security的做法。当你将Spring Security的起步依赖项添加到你的Spring Boot项目中时,它会执行过滤器映射,拦截所有请求,并将其映射到Spring Security的过滤器调用DelegatingFilterProxy

如果你不是在Spring Boot应用程序中工作,你需要手动添加这个过滤器来拦截所有请求。因此,查看这段代码将让你了解幕后发生了什么。这个过滤器映射到所有传入的请求。这就是Spring Security如何根据你的配置允许或阻止请求的能力,因为它监听并拦截所有东西。请注意,对于非Web应用程序来说,进行方法级别的安全性处理是一回事,Web应用程序似乎是最常见的使用案例,这就是它在这里起作用的方式。

现在可能会有人问,为什么我要添加授权?只有这一个URL在我的应用中。其他的不需要被每个人都访问。所以为什么我要添加Spring Security来拦截每一个请求?我只想看看这一个。你可以,或者一组URL。好的,原因是,为了使应用程序安全,它必须受到所有漏洞的保护,而不能只专注于少数需要认证的URL。如果你只在应用程序的一部分中添加Spring Security,而让应用程序的其他部分存在漏洞,那么你的整个应用程序就不安全,显然是不行的。所以无论你是否想让应用程序中的一个URL由Spring Security保护,还是多个URL,你的配置都是直接与Spring Security相关的,你不必在过滤器之后搞乱一切。

现在我想告诉你,你可能会问,如果我想要添加授权,怎么办?只有这一个URL在我的应用程序中。其他的不需要被每个人都访问。所以为什么我要添加Spring Security来拦截每一个请求?我只想看看这一个。你可以,或者一组URL。好的,原因是,为了使应用程序安全,它必须受到所有漏洞的保护,而不能只专注于少数需要认证的URL。如果你只在应用程序的一部分中添加Spring Security,而让应用程序的其他部分存在漏洞,那么你的整个应用程序就不安全,显然是不行的。所以无论你是否想让应用程序中的一个URL由Spring Security保护,还是多个URL,你的配置都是直接与Spring Security相关的,你不必在过滤器之后搞乱一切。

相关推荐
公贵买其鹿14 分钟前
List深拷贝后,数据还是被串改
java
向前看-3 小时前
验证码机制
前端·后端
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹4 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭5 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫5 小时前
泛型(2)
java
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
南宫生5 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石5 小时前
12/21java基础
java
李小白665 小时前
Spring MVC(上)
java·spring·mvc