springsecurity 扩展参数_一文带你了解强大的 Spring Security 架构原理!

本文深入探讨Spring Security的架构和核心概念,包括身份认证、授权、Web安全和过滤器链的定制。通过示例解释了如何配置Authentication Managers和Authorization,以及如何在异步处理中保持安全性。适合Spring Security初学者和专家了解其工作原理。
摘要由CSDN通过智能技术生成
作者:before31 https:// my.oschina.net/xuezi/bl og/3126351

本指南是Spring Security的入门,它提供了对该框架的设计和基本构建的见解。我们仅介绍了应用程序安全性的最基本知识,但是这样做可以解除使用Spring Security的开发人员所遇到的一些困惑。为此,我们会看一下使用过滤器(更通常是使用方法注释)在Web应用程序中应用安全性的方式。当你需要从高层次了解安全应用程序的工作方式,如何自定义它,或者仅需要学习如何考虑应用程序安全性时,请使用本指南。

本指南并不是解决最基本问题的手册(对于基本问题,有很多其他可参考的资料),但对于初学者和专家都可能有用。 Spring Boot也被提及了很多次,因为它为安全的应用程序提供了一些默认行为,并且理解它与整个体系结构之间的关系会对你很有帮助。所有这些原则同样适用于不使用Spring Boot的应用程序。

身份认证和访问控制(Authentication and Access Control)

应用程序安全性差不多可以归结为两个独立的问题:身份认证(你是谁)和授权(authorization)(你可以做什么?)。 有时人们会说“访问控制”而不是“授权”,这可能会造成困惑,但是以这种方式思考可能会有所帮助,因为“授权”在其他地方又有其他含义。 Spring Security的体系结构旨在将身份认证与授权分开,并且具有许多策略和扩展点。

身份认证

认证的主要策略接口是AuthenticationManager,该接口只有一个方法:

public interface AuthenticationManager {

  Authentication authenticate(Authentication authentication)
    throws AuthenticationException;

}

在AuthenticationManager接口的authenticate()方法中可以有3种处理情况:

  • 如果认证成功,则返回一个Authentication对象(通常将其authenticated属性设置为true)。
  • 如果认证失败,则抛出AuthenticationException异常。
  • 果无法判断成功或失败,则返回null。

AuthenticationException是运行时异常。它通常由应用程序以通用方式处理,具体取决于应用程序的风格或目的。 换句话说,通常不希望用户代码捕获并处理它。 例如,一个Web UI将呈现一个页面,该页面说明身份验证失败,而后端HTTP服务将发送401响应,是否携带WWW-Authenticate标头则取决于上下文。

AuthenticationManager最常用的实现是ProviderManager,它委派了AuthenticationProvider实例链。AuthenticationProvider有点像AuthenticationManager,但是它还有一个额外的方法,允许调用者查询是否支持给定的Authentication类型:

public interface AuthenticationProvider {

	Authentication authenticate(Authentication authentication)
			throws AuthenticationException;

	boolean supports(Class<?> authentication);

}

supports()方法中的Class<?>参数实际上是Class<? extends Authentication>(仅会询问它是否支持将传递到authenticate()方法中的内容)。 通过委派给AuthenticationProviders链,ProviderManager可以在同一应用程序中支持多种不同的身份验证机制。 如果ProviderManager无法识别特定的身份验证实例类型,则将跳过该类型。

ProviderManager具有可选的父级,如果所有提供程序都返回null,则可以咨询该父级。 如果父级不可用,则空的Authentication将导致AuthenticationException。

有时,应用程序具有逻辑组的受保护资源(例如,与路径模式/api/**匹配的所有Web资源),并且每个组可以具有自己的专用AuthenticationManager。 通常,每一个都是ProviderManager,它们共享一个父级。 因此,父级是一种“全局”资源,充当所有providers的后备。

使用ProviderManager的AuthenticationManager层次结构

2cfcc34d7e5059e229117c9fc5083d67.png

定制Authentication Managers

Spring Security提供了一些配置助手,可以快速获取在应用程序中设置的通用Authentication Managers功能。 最常用的帮助程序是AuthenticationManagerBuilder,它非常适合设置内存中、JDBC或LDAP用户详细信息,或添加自定义UserDetailsService。这是配置全局(父)AuthenticationManager的应用程序的示例࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值