由浅入深理解SpringSecurityOauth2框架原理

克服自己消极的、钻牛角尖的扭曲的思想方式,便能增加效率,提高自尊心

1.基础知识点

为了理解Security Oauth2 我们要先理解Security ;理解Security ,我们需要先做一些Security组件等基础认识的认识。

Security组件的认识
  • SecurityContextHolder:用来存储安全上下文信息,Spring Security 的校验之后,验证信息存储在SecurityContext

  • Authentication: 在Security领域,用户密码等不叫做用户密码,叫做Authentication。Authentication 在 spring security 中是最高级别的身份 / 认证的抽象。 在进入Security领域前,得把信息封装成Authentication.(如果用一成语来形容,就是入乡随俗),例如我们常用的[clientId,clientSecret ] [username,password]都可以封装成一个(Authentication)UsernamePasswordAuthenticationToken

  • AuthenticationManager: 从组件层面讲,此组件是用来校验Authentication,常见实现类有ProviderManager。但是从代码层面,ProviderManager 将校验的工作交给了另一个组件AuthenticationProvider来完成的。ProviderManager 中维护一个List<AuthenticationProvider>,通过遍历找到支持当前Authentication认证的AuthenticationProvider,交给其进行认证。(这样看AuthenticationManager可以看做是大总管

  • AuthenticationProvider: 就是上面说的代码层面真正Authentication进行校验的组件。常见的AuthenticationProvider有

    (1.DaoAuthenticationProvider: Dao式认证Provider ,从数据库中取出信息与提交的信息进行比对,完成认证。

    (2. AnonymousAuthenticationProvider: 匿名认证Provider

  • UserDetails : 理解UserDetails,我们可以对比Authentication来理解, Authentication是来自用户提交的数据封装,UserDetails 是从数据层获取的用户信息封装。

  • UserDetailsServiceDaoAuthenticationProvider认证器从数据库层取数据是通过UserDetailsService 完成的,取到的是UserDetails 。常见的UserDetailsService

    (1.JdbcDaoImpl

    (2.ClientDetailsUserDetailsService: 查询[clientId,clientSecret ]形式的UserDetails

Filter-Servlet

我们都知道请求经过Filter链到Servlet

过程看起来是这样

在这里插入图片描述

Security原理

牢记,Spring Security在web应用中,是通过filter 介入的。

为了介入到主体ApplicationFilterChain中,这里要介绍一个特殊的Filter ,

DelegatingFilterProxy:

​ 这个Filter很有意思,他内部有一个Filter delegate属性 ,用来代理另一个Filter。当请求执行到DelegatingFilterProxy时,会调用delegate 这个Filter 。DelegatingFilterProxy可以看做是一个可以让Filter链拐弯的 Filter

在这里插入图片描述

FilterChainProxy:

​ 也是一个Filter , Security就是通过把他设置到DelegatingFilterProxy.delegate属性上来介入了主体FilterChain .但是从他名称来看他本身也是一个代理性质的FIlter

​ 他内部维护了一个List<SecurityFilterChain> filterChains来表示不同权限的url对应的不同的过滤器链 ,但是一次请求最多只有一个SpringSecurityFilterChain链。

SpringSecurityFilterChain

​ FilterChainProxy遍历List<SecurityFilterChain> filterChains匹配到一个适用于当前请求的SecurityFilterChain然后就是链式调用了。

Security 常见Filter

  • SecurityContextPersistenceFilter: 位于SecurityFilterChain的顶端。以前我们使用session来存储用户信息,用了Security框架后,用户登录一次,后续通过sessionId 来识别,用户信息存放到SecurityContextHolder中,这个放入的过程就是SecurityContextPersistenceFilter完成的。SecurityContextPersistenceFilter的主要工作创建 SecurityContext 安全上下文信息和请求结束时清空 SecurityContextHolder(用了try,finally组合)

  • UsernamePasswordAuthenticationFilter:表单认证是最常用的一个认证方式,允许表单输入用户名和密码进行登录。他会先将 [username,password]封装成Authentication然后交给authenticationManager 认证,authenticationManager 会选择一个provider ,通过UserDetailsService从redis获取mysql等数据层面获得存储用户信息的数据的UserDetail与Authentication 进行对比。认证成功

  • ExceptionTranslationFilter: 异常转换过滤器位于整个 springSecurityFilterChain 的后方,主要处理两大异常,AccessDeniedException 访问异常和 AuthenticationException 认证异常。根据配置和异常类型,会选择跳转到登录页面,或者404 ,405页面。

代码层面的集成:

代码中使用Security 最重要的是@EnableWebSecurity ,这是代码集成Se

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python爬虫的学习可以从浅到深逐步进行,以下是一个可能的学习路径: 1. 网络基础知识:了解HTTP协议和HTML基础知识,理解网页结构和标签的含义。 2. requests库:学习使用Python的requests库发送HTTP请求,获取网页内容。可以使用该库来实现简单的网页爬取。 3. BeautifulSoup库:学习使用BeautifulSoup库解析HTML文档,提取所需的信息。该库可以帮助我们以更方便的方式处理网页数据。 4. 数据存储:学习使用CSV、JSON、数据库等方式来存储爬取到的数据,以便后续使用和分析。 5. 爬虫进阶:学习处理JavaScript渲染的页面,使用Selenium库模拟浏览器行为。还可以学习使用代理IP、验证码处理等技术来应对一些反爬机制。 6. 爬虫框架:了解并学习使用一些流行的爬虫框架,如Scrapy,可以大幅度提高爬虫的开发效率和稳定性。 7. 反爬虫策略:学习了解常见的反爬虫策略,如User-Agent伪装、IP封禁等,并学会应对这些策略,提高爬虫的鲁棒性。 8. 数据清洗和分析:学习使用Python的数据处理和分析库,如Pandas、NumPy、Matplotlib等,对爬取到的数据进行清洗和分析。 9. 分布式爬虫:学习使用分布式爬虫框架,如Scrapy-Redis,来提高爬虫的并发能力和抓取速度。 10. 伦理和法律问题:了解爬虫的伦理和法律问题,遵守相关法律法规,不进行非法、恶意的爬取行为。 以上是一个学习Python爬虫的大致路径,根据自己的兴趣和实际需求可以自行调整学习的深度和广度。注意,在进行爬虫时请遵守网站的相关规定和爬虫道德准则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值