位置: IT常识 - 正文

Spring Security(七)-- AuthenticationProvider

编辑:rootadmin
Spring Security(七)-- AuthenticationProvider 一、前言

推荐整理分享Spring Security(七)-- AuthenticationProvider,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在之前的学习中了解了userDeatailsService和passwordEncoder,在本章我们将介绍身份验证流程的其余部分,首先我们要讨论如何实现AuthenticationProvider接口,在身份验证成功之后,将探讨SpringContext接口以及Spring Security管理它的方式。

Spring Security(七)-- AuthenticationProvider

在企业级应用程序中,你可能会发现自己处于这样一种状况:基于用户名和密码的身份验证的默认实现并不适用。另外,当涉及身份验证时,应用程序可能需要实现多个场景。例如,我们可能希望用户能够通过使用在SMS消息中接收到的或由特定应用程序显示的验证码来证明自己的身份。或者,也可能需要实现某些身份验证场景,其中用户必须提供存储在文件中的某种密钥。我们甚至可能需要某些使用用户指纹的表示来实现身份验证逻辑。框架的目的是要足够灵活,以便允许我们实现这些所需场景中的任何一个。   框架通常会提供一组最常用的实现,但它必然不能涵盖所有可能的选项。就SpringSecurity而言,可以使用AuthenticationProvider接口来定义任何自定义的身份验证逻辑。

二、在身份验证期间表示请求

身份验证(Authentication)也是处理过程中涉及的其中一个必要接口的名称。Authentication接口表示身份验证请求事件,并且会保存请求访问应用程序的实体的详细信息。可以在身份验证过程期间和之后使用与身份验证请求事件相关的信息。请求访问应用程序的用户被称为主体(principal),如果你有兴趣可以打印下认证后的authentication对象,你会发现Principal里封装的就是我们的UserDetails,这意味着我们可以对此进行强转化,方便后面的职责分离。如果你曾经使用过java Security API ,就会知道,在Java Security API中,名为Principai的接口表示相同的概念。Spring Security的Authentication接口扩展了这个契约。    Spring Security中的Authentication契约不仅代表了一个主体,还添加了关于身份验证过程是否完成的信息以及权限集合。实际上,这个契约是为了扩展Java Security API的Principal契约而设计的,这在与其他框架和应用程序实现的兼容性方面是一个加分项。Authentication接口代码如下:

public interface Authentication extends Principal, Serializable {Collection<? extends GrantedAuthority> getAuthorities();Object getCredentials();Object getDetails();Object getPrincipal();boolean isAuthenticated();void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException;}

目前需要了解的几个方法如下:

isAuthenticated():如果身份验证技术,则返回true;如果身份验证过程仍在进行,则返回false.getCredentials():返回身份验证过程中使用的密码或任何密钥。getAuthorities():返回身份验证请求的授权集合。三、实现自定义身份验证逻辑

Spring Security中的AuthenticationProvider负责身份验证逻辑。AuthenticationProvider接口的默认实现会将查找系统用户的职责委托给UserDetailsService。它还使用PasswordEncoder在身份验证过程中进行密码管理。其中AuthenticationProvider接口diamagnetic如下:

public interface AuthenticationProvider {Authentication authenticate(Authentication authentication)throws AuthenticationException;boolean supports(Class<?> authentication);}

AuthenticationProvider的职责是与Authentication接口紧密耦合一起的。authenticate()方法会接收一个Authentication对象作为参数并返回一个Authentication对象,需要实现authenticate()方法来定义身份验证逻辑。可以通过以下3个要点总结如何实现authenticate()方法:

如果身份验证失败,则该方法应该抛出AuthenticationException异常。如果该方法接收到的身份验证对象不被AuthenticationProvider实现所支持,那么该方法应该返回null。该方法应该返回一个Authentication实例,该实例表示一个完全通过了身份验证的对象。对于这个实例,isAuthenticated()方法会返回true,并且它包含关于已验证实体的所有必要细节。通常,应用程序还会从实例中移除密码等敏感数据。因为保留这些数据可能会将它暴露给不希望看到的人。

该接口的另一个方法是supports(Class<?> authentication)。如果当前的AuthenticationProvider支持作为Authentication对象而提供的类型,则可以实现此方法以返回true。注意,即使该方法对一个对象返回true,authenticate()方法仍然有可能通过返回null来拒绝请求。Spring Security这样的设计是较为灵活的,使得我们可以实现一个AuthenticationProvider,它可以根据请求的详细信息来拒绝身份验证请求,而不仅仅是根据请求的类型来判断。

四、应用自定义身份验证逻辑
本文链接地址:https://www.jiuchutong.com/zhishi/295877.html 转载请保留说明!

上一篇:调频连续波(FMCW)原理(调频连续波雷达)

下一篇:html实现用户注册页面(生日实现年月日的三级联动)(html用户注册界面)

  • 节税是什么意思
  • 减免所得税额怎么做分录
  • 公司基本户可以转私人账户吗
  • 公司员工住宿费怎么入账
  • 企业注销盈利一定要交个税吗
  • 厨房酒店用品
  • 企业开出的普票和专票对税额有影响吗
  • 制造业三项费用占比行业怎么算
  • 保证金可以挪用吗
  • 公司刚注册之后怎么办
  • 善意接受虚开发票只能自认倒霉么
  • 母公司收取服务费请示
  • 会计凭证填制要求有哪些
  • 行业协会的作用定位
  • 多缴纳的附加税怎么退
  • 租车补贴记入工资的会计处理怎么做?
  • 资产负债表货币资金与现金流量表的关系
  • 税法是否认可低税收
  • 租金发票会计分录
  • 房地产企业增值税预缴
  • 减免附加税还要计提吗
  • 普票3点怎么算
  • 房地产公司靠什么赚钱
  • 对外支付类型
  • 清算时土地增值税计税依据
  • 个人所得税app入职时间不对
  • 个税按工资薪金未按时申报的处罚规定
  • 印花税分配比例
  • 公允价值变动借方是增还是减
  • 什么情况下确认成本
  • 预计负债是什么原则
  • 公司账款无法收回扣款合法吗
  • amr文件怎么转换为mp3
  • php的教程
  • 固定资产加速折旧方法
  • 建筑工程企业管理费包括哪些内容
  • 监狱劳教企业是国企吗
  • 集体租赁住房有房产证吗
  • 详解中国女足出线形势
  • 成品油发票当月冲红
  • 出租车发票能不能多开
  • 优先股票与普通股票相比,其优先权主要指
  • swift 协议扩展
  • 自然人所属税务机关怎么选
  • html友情链接模板
  • 暂估入库成本需要冲销吗
  • 公司的融资租赁有哪些
  • 直接人工成本包括五险一金吗
  • 清包工可以有一部分小料吗
  • 律师跨省办案收取的费用叫什么
  • 小企业会计准则适用于哪些企业
  • access 200
  • 一般纳税人商品暂估按销售的数量可以暂估成本吗
  • mysql all
  • 车间费用计入什么
  • 在贫困户入股分红大会上的讲话
  • 待处理财产损溢借贷增减方向
  • 社保个人部分应该做到哪个科目
  • 视同销售但未收到钱怎么做账?
  • 合同取得成本如何收回
  • 认证后的进项税额留抵退税
  • 预收账款最多挂几年
  • MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM
  • sql union和join区别
  • win7开始菜单路径在哪里
  • xp系统怎么找回删除的文件
  • linuxmail命令
  • 重装系统的简写
  • win8 开机
  • win10系统打开网页一会儿就没了
  • win7双硬盘双系统
  • tomcat配置虚拟主机
  • 如何升级win
  • 电脑中毒蓝屏了怎么办修复
  • Linux查看内存的命令是
  • Unity3D Vuforia Android 相机调焦
  • shell脚本的启动和关闭命令
  • 税务局约谈记录
  • 空调设备税率多少钱
  • 杭州电子税务局注册流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设