zoukankan      html  css  js  c++  java
  • shiro认证时Realm的写法

    第一种情况:

    1:实现shiro的认证可以继承AuthenticatingRealm,并重写它的doGetAuthenticationInfo方法。

    2:AuthenticatingRealm类的doGetAuthenticationInfo方法返回一个SimpleAuthenticationInfo对象,该对象里封装了要比对的凭证(即密码),然后把返回的SimpleAuthenticationInfo对象交给AuthenticatingRealm内部使用的CredentialsMatcher进行凭据验证。CredentialsMatcher会根据用户封装的UsernamePasswordToken和返回的SimpleAuthenticationInfo进行凭据的比对。账号的比对则在Realm内部由开发者完成。注意:这是普通明文密码的情况

    3:如果是加盐的散列加密的密码,则需要给AuthenticatingRealm设置CredentialsMatcher,Shiro提供了CredentialsMatcher的散列实现HashedCredentialsMatcher,这样返回的SimpleAuthenticationInfo对象中不仅要带上密文密码,还要带上加密时的盐,这样以来HashedCredentialsMatcher可以根据用户封装的UsernamePasswordToken和返回的SimpleAuthenticationInfo进行凭据的比对。同样账号的比对则在Realm内部由开发者完成。注意:这是加盐散列密文密码的情况

    4:返回的SimpleAuthenticationInfo对象的作用除了2和3中说的交给CredentialsMatcher进行凭据验证外,还有一个作用就是提供给SecurityManager,绑定到Subject上,这样我们可以通过subject来获取到认证通过的主体的信息,即SimpleAuthenticationInfo对象中的principal(我们可以把认证通过主体的基本信息都保存到principal中,这样就可以在代码的其他地方直接通过subject获取到主体的基本信息)。

    第二种情况:

    1:实现shiro的认证也可以实现Realm接口,并重写它的getAuthenticationInfo方法。

    2:和第一种情况不同的是,我们要在getAuthenticationInfo方法中完成账号和密码的全部比对,因为Realm接口内部没有CredentialsMatcher可使用。

    3:返回的SimpleAuthenticationInfo对象的唯一作用就是提供给SecurityManager,绑定到Subject上,这样我们可以通过subject来获取到认证通过的主体的信息,即SimpleAuthenticationInfo对象中的principal(我们可以把认证通过主体的基本信息都保存到principal中,这样就可以在代码的其他地方直接通过subject获取到主体的基本信息)。

  • 相关阅读:
    (转)使用BigDecimal进行精确运算
    date——sql查询
    (转)每天一个linux命令(8):cp 命令,复制文件和文件夹
    (转)每天一个linux命令(15):tail 命令
    (转)Linux 下 查看以及修改文件权限
    (转)用JUnit4进行单元测试
    (转)Spring Boot Junit单元测试
    (转)ZXing解析二维码
    (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
    (转)js jquery.qrcode生成二维码 带logo 支持中文
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302484.html
Copyright © 2011-2022 走看看