• 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获取到主体的基本信息)。

  • 相关阅读:
    编写你自己的单点登录(SSO)服务
    SignalR + KnockoutJS + ASP.NET MVC4 实现井字游戏
    Quartz使用总结
    Quartz.Net入门
    ASP.NET批量下载文件的方法
    Asp.Net文件的上传和下载
    AOP实践—ASP.NET MVC5 使用Filter过滤Action参数防止sql注入,让你代码安全简洁
    ASP.NET MVC4中的异步控制器
    Mybatis表关联一对多、多对一、多对多
    Xamarin android使用Sqlite做本地存储数据库
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302484.html
Copyright © 2020-2023  润新知