位置: 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用户注册界面)

  • 支付宝怎么代领孩子健康码(支付宝怎么代领孩子的电子社保卡)

    支付宝怎么代领孩子健康码(支付宝怎么代领孩子的电子社保卡)

  • 文件名分隔符(文件的分隔符号是)

    文件名分隔符(文件的分隔符号是)

  • 华为手机可以定位别人在哪里吗 (华为手机可以定位苹果手机吗)

    华为手机可以定位别人在哪里吗 (华为手机可以定位苹果手机吗)

  • 你的账号已在appstore和itunes中被禁用(你的账号已在app被禁用)

    你的账号已在appstore和itunes中被禁用(你的账号已在app被禁用)

  • 怎么把图片弄到word上(怎么把图片弄到cad里面去)

    怎么把图片弄到word上(怎么把图片弄到cad里面去)

  • 快手社区规定账号封禁号还可以用么(快手违反社区规定账号封禁是永久封吗)

    快手社区规定账号封禁号还可以用么(快手违反社区规定账号封禁是永久封吗)

  • 微信故障修复聊天记录能恢复吗(微信故障修复聊天记录)

    微信故障修复聊天记录能恢复吗(微信故障修复聊天记录)

  • 错误码7610001什么意思(错误码7610034什么意思)

    错误码7610001什么意思(错误码7610034什么意思)

  • 解除情侣空间后再开通数据还在吗(解除情侣空间后能恢复吗)

    解除情侣空间后再开通数据还在吗(解除情侣空间后能恢复吗)

  • excel表格的线条没有了怎么办(excel表格的线条怎么变细)

    excel表格的线条没有了怎么办(excel表格的线条怎么变细)

  • qq消息震动开了但无振动(qq消息振动关了还是振动)

    qq消息震动开了但无振动(qq消息振动关了还是振动)

  • 三星exynos980相当于麒麟多少(三星EXynos980相当于骁龙多少)

    三星exynos980相当于麒麟多少(三星EXynos980相当于骁龙多少)

  • qq空间删过的视频怎么恢复(qq空间删除过的视频在哪里)

    qq空间删过的视频怎么恢复(qq空间删除过的视频在哪里)

  • 沾沾卡能复制全家福吗(沾沾卡可以指定沾哪张吗)

    沾沾卡能复制全家福吗(沾沾卡可以指定沾哪张吗)

  • 一加7pro防水级别是多少(一加7pro几级防水)

    一加7pro防水级别是多少(一加7pro几级防水)

  • word文档改不了内容(word文档改不了格式怎么办)

    word文档改不了内容(word文档改不了格式怎么办)

  • 京东怎么申请取消订单(京东怎么申请取消订单退款?)

    京东怎么申请取消订单(京东怎么申请取消订单退款?)

  • xsmax单卡是什么版(xsmax单卡是什么卡)

    xsmax单卡是什么版(xsmax单卡是什么卡)

  • 云图库照片在哪里找到(云图库安全吗)

    云图库照片在哪里找到(云图库安全吗)

  • 微信运动数据来源怎么删除(微信运动数据来源搜索不到设备)

    微信运动数据来源怎么删除(微信运动数据来源搜索不到设备)

  • 苹果手机收藏的图片在哪里(苹果手机收藏的照片在哪里可以找到)

    苹果手机收藏的图片在哪里(苹果手机收藏的照片在哪里可以找到)

  • 跨栏居中显示怎么设置(跨栏居中在哪)

    跨栏居中显示怎么设置(跨栏居中在哪)

  • e-s0bic1.exe进程是什么文件的 e-s0bic1进程有什么作用(进程aissca.exe)

    e-s0bic1.exe进程是什么文件的 e-s0bic1进程有什么作用(进程aissca.exe)

  • 羊肚菌的功效(图文)(羊肚菌的功效和价格)

    羊肚菌的功效(图文)(羊肚菌的功效和价格)

  • YOLOv5深度剖析(yolov5结构解析)

    YOLOv5深度剖析(yolov5结构解析)

  • 印花税进什么费用
  • 增值税应纳税额的计算
  • 工地工贸药品入库流程
  • 子公司之间股权转让
  • 用友软件生成凭证合并进项税
  • 银行账户利息怎么记账
  • 软件即征即退的发票怎么开
  • 管理费用预测
  • 小规模季度报税流程
  • 哪些科目需要计提资产减值损失
  • 购原材料红字发票会计分录怎么写?
  • 对供应商的罚款怎么入账
  • 企业所得税季度申报填写示例
  • 国产设备购置投资由设备原价与什么构成
  • 库存商品怎么结转损益
  • 讲课费税务发票类别
  • 预付账款收不回来摘要怎么写
  • 子网掩码和默认网关怎么填
  • 销售差异计算公式
  • 工业园租金大概是多少
  • linux grep显示行数
  • 印花税按次按月
  • 补充医疗税前扣除还是税后扣除
  • php字符串型数据的定义方式
  • 往来款怎么查
  • 办公室装修入账
  • 车辆运输费计入什么科目
  • php 动态调用类方法
  • php操作mysql数据库
  • 股东投资款超过注册资金的案例
  • 印花税怎么从账上取数
  • 母子公司转让不动产 契税
  • 帝国cms移动端设置教程
  • mysql事务引擎
  • mysqljoin和where哪个好
  • 投稿网址打不开
  • mongodb查询字段不存在
  • 委托收款的含义
  • 会影响当期损益的科目有
  • 给个体工商户打工受伤怎么办
  • 税法中特许权费包括哪些
  • 去年的成本发票做错了需要补税吗
  • 独立核算分公司与总公司的账务处理
  • 住宿费用专票可以抵扣吗
  • 销售折让的红字信息申请表怎么做
  • 工程建设项目融资方式有哪些
  • 房地产企业土地价款如何入账
  • 出口抵减内销产品应纳税额
  • 对公付货款没有收到发票如何处理
  • 收到其他公司往来款怎么做账
  • 契税为什么计入成本费用
  • 银行销户余额怎么查
  • 收到红字进项发票先勾选再做转出吗
  • 发票邮寄到家
  • 一般纳税人先确认收入吗
  • 备查账簿有没有固定的格式
  • mysql varchar类型
  • windows 10预览版
  • 应用程序发生异常如何解决
  • windows2003服务不能开启
  • vssvc.exe
  • win7开机出现标志后就重启
  • win10累积更新是什么意思
  • 计算机无法从休眠
  • 一系列优秀的Android开发资料
  • linux命令有啥用
  • 解读css发展历史简述
  • bootstrap要学吗
  • 使用css设置文字效果
  • Python+Wordpress制作小说站
  • python web开发环境搭建
  • jquery设置滚动条到底部
  • 原生js实现路由
  • 解决js请求服务问题
  • 体检机构 保险
  • 新加坡政治体制的介绍
  • 企业调查表资金怎么填
  • 在珠海可以做什么生意
  • 越南进口废塑料新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设