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

  • 拼多多可以用支付宝吗(拼多多可以用支付宝花呗吗)

    拼多多可以用支付宝吗(拼多多可以用支付宝花呗吗)

  • 支付宝怎么查询疫苗批号(支付宝怎么查询婚姻状况)

    支付宝怎么查询疫苗批号(支付宝怎么查询婚姻状况)

  • imessage会显示已读吗(imessage会显示已送达)

    imessage会显示已读吗(imessage会显示已送达)

  • 苹果xr为什么一直在创建id(苹果xr为什么一听微信语音屏幕就黑了)

    苹果xr为什么一直在创建id(苹果xr为什么一听微信语音屏幕就黑了)

  • 苹果三代耳机触摸在哪里(苹果三代耳机触摸灵敏度可以调整么)

    苹果三代耳机触摸在哪里(苹果三代耳机触摸灵敏度可以调整么)

  • 小米ai虚拟助手有什么用(小米ai虚拟助手怎么用)

    小米ai虚拟助手有什么用(小米ai虚拟助手怎么用)

  • 电脑微信不用手机确认(电脑微信不用手机)

    电脑微信不用手机确认(电脑微信不用手机)

  • 荣耀30s可以息屏显示时间吗(荣耀30s怎样设置灭屏显示)

    荣耀30s可以息屏显示时间吗(荣耀30s怎样设置灭屏显示)

  • 苹果5不支持微信咋办(苹果不支持微软系统软件怎么办)

    苹果5不支持微信咋办(苹果不支持微软系统软件怎么办)

  • 华为8x长宽多少厘米(华为8x多长多宽)

    华为8x长宽多少厘米(华为8x多长多宽)

  • 苹果x后压屏与原装差别(苹果x后压屏使用感受)

    苹果x后压屏与原装差别(苹果x后压屏使用感受)

  • 拼多多里面的直播是免费的吗(拼多多里面的直通车叫什么)

    拼多多里面的直播是免费的吗(拼多多里面的直通车叫什么)

  • 云充吧可以在外地还吗(云充吧使用方法)

    云充吧可以在外地还吗(云充吧使用方法)

  • 手机淘宝文件目录在哪(手机淘宝文件目录怎么找)

    手机淘宝文件目录在哪(手机淘宝文件目录怎么找)

  • 宽带忘记密码怎么找回(宽带忘记密码怎么连接手机)

    宽带忘记密码怎么找回(宽带忘记密码怎么连接手机)

  • oppok5发视频带美颜吗(oppo手机拍视频有美颜吗)

    oppok5发视频带美颜吗(oppo手机拍视频有美颜吗)

  • 手机号转网有影响吗(手机号转网影响微信支付宝吗)

    手机号转网有影响吗(手机号转网影响微信支付宝吗)

  • iphone6怎么手写输入(iphone6怎么手写输入法设置)

    iphone6怎么手写输入(iphone6怎么手写输入法设置)

  • 荣耀20pro拍照教程(荣耀20pro拍照参数设置)

    荣耀20pro拍照教程(荣耀20pro拍照参数设置)

  • w10系统的运行在哪里(win10运行在哪里)

    w10系统的运行在哪里(win10运行在哪里)

  • 手机qq怎么设置动态头像(手机qq怎么设置加好友权限)

    手机qq怎么设置动态头像(手机qq怎么设置加好友权限)

  • 手机怎么获取wifi密码(手机怎么获取steam交易链接)

    手机怎么获取wifi密码(手机怎么获取steam交易链接)

  • 电脑显示器改电视方法(电脑显示器改电视没有声音怎么办)

    电脑显示器改电视方法(电脑显示器改电视没有声音怎么办)

  • vivox27如何设置人脸识别(vivox27如何设置动态壁纸)

    vivox27如何设置人脸识别(vivox27如何设置动态壁纸)

  • 美图秀秀手机怎么抠图换脸(美图秀秀手机怎么把一张图片放到另一张图片上)

    美图秀秀手机怎么抠图换脸(美图秀秀手机怎么把一张图片放到另一张图片上)

  • 小米9自带钢化膜吗(小米9自带钢化玻璃膜吗)

    小米9自带钢化膜吗(小米9自带钢化玻璃膜吗)

  • 华为手机可以用苹果无线耳机吗(华为手机可以用carplay吗)

    华为手机可以用苹果无线耳机吗(华为手机可以用carplay吗)

  • 多卷集的最后一张磁盘是什么意思(多卷集的最后一张磁盘)

    多卷集的最后一张磁盘是什么意思(多卷集的最后一张磁盘)

  • MAC电脑Command键调换为Control键的方法(mac电脑command键快捷设置)

    MAC电脑Command键调换为Control键的方法(mac电脑command键快捷设置)

  • 销售返利可以计入销售费用吗
  • 小规模纳税人定期定额征收的怎么报税
  • 企业所得税汇算清缴退税怎么做账
  • 股东会的特别决议事项包括
  • 计提工会经费的基数是什么
  • 租金是含税的吗
  • 融资租赁如何确认收入
  • 增值税免缴
  • 净流动负债和流动负债
  • 给员工购买意外险进项税能不能抵扣
  • 业务招待费超支原因怎么写
  • 建筑公司收到工程服务发票怎么做会计分录
  • 小规模定期定额申报
  • 易票365怎么认证发票
  • 收据做账税局认嘛
  • 项目资本金是什么意思大白话
  • 行程单燃油附加费可以抵扣吗
  • 企业年金个税如何计提
  • uv价值是怎么计算公式
  • 非现金资产包括
  • 结转进项税销项税额的分录怎么写
  • 公司过户费用怎么入账
  • 累计折旧额怎么计算公式
  • 劳务报酬所得税计算
  • 进料加工免退税
  • laravel入门与实战:构建主流php应用开发框架
  • 公司有个税怎么交
  • php 封装
  • 城市维护建设税减免税优惠政策
  • 企业发生的利得或损失应计入企业的营业外收支
  • php字符串包含某个字符串
  • 浅析企业坏账产生的原因及对策
  • 注销对公账户要去原支行吗
  • 抄税前要做什么
  • 一般纳税人普通发票做账
  • 收到的发票税收怎么处理
  • 低值易耗品在年报上怎么看的
  • pytest conftest
  • 织梦网站特有标识
  • 领取定额备用金的会计分录
  • 给个人的返佣如何交税
  • 本月发生的费用,下月取得发票,怎么做账
  • sqlserver2005 TSql新功能学习总结(数据类型篇)
  • 基建和技改的区别
  • 报销差旅费会计分录退回现金
  • 投资性房地产转为非投资性房地产
  • 现金支票存根金额怎么写
  • 广告公司收到广告收入会计分录
  • 购买税控盘用银行抵扣吗
  • 金税盘减免税款分录
  • 政府会计累计盈余借贷方向
  • 研发支出的定义
  • 财产租赁合同印花税计税依据
  • 安装固定资产领域有哪些
  • 会计记账中借方和贷方
  • 五证合一的办理流程是什么
  • sql存储过程的作用
  • Mysql version can not be less than 4.1 出错解决办法
  • windows历代版本一览
  • 大白菜u盘启动按f几
  • Win7系统开机流程
  • os x10.11el capitan beta6更新了什么?os x10.11el capitan beta6发布下载
  • linux怎么禁用命令
  • Win10中SmartScreen无法设置需要系统管理员身份该怎么办?
  • win7如何格式化D盘
  • win10怎么关掉
  • win7系统删除密码
  • linux系统怎么关闭137端口
  • node运行js文件
  • Cocos2dx3.2 Crazy Tetris 绘制不规则方块 遮罩(ClippingNode的使用)
  • jqgrid动态增加列
  • linux小技巧
  • 简述matlab中控制系统的数学描述类型
  • python发送短信到手机
  • Javascript中Array.prototype.map()详解
  • jquery 插件编写
  • 公务员副处级工资待遇
  • 北京 国税局
  • 注册管理税务师和注册税务师的区别
  • 出成效的意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设