zoukankan      html  css  js  c++  java
  • shiro系列5:Realm

    一、简介:

    域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色和权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

    二、自定义 Realm:

    自定义 Realm 只需要继承AuthorizingRealm,就能够继承到认证与授权功能。AuthorizingRealm继承了 AuthenticatingRealm(即身份验证),而且也间接继承了 CachingRealm(带有缓存实现)。

     

     

     

    三、将Realm设置到securityManager中

        @Bean
        public CustomRealm customRealm(){
            CustomRealm customRealm=new CustomRealm();
            customRealm.setCredentialsMatcher(customHashedCredentialsMatcher());
            customRealm.setCacheManager(redisCacheManager());
            return customRealm;
        }
    
        @Bean
        public SecurityManager securityManager(){
            DefaultWebSecurityManager defaultWebSecurityManager=new                                               DefaultWebSecurityManager();
            defaultWebSecurityManager.setRealm(customRealm());
            return defaultWebSecurityManager;
        }

    四、认证策略

    SecurityManager 接口继承了 Authenticator,另外还有一个 ModularRealmAuthenticator实现,其委托给多个Realm 进行验证,验证规则通过 AuthenticationStrategy 接口指定。
    1、AuthenticationStrategy 接口的默认实现:
    FirstSuccessfulStrategy:只要有一个 Realm 验证成功即可,只返回第 一个 Realm 身份验证成功的认证信息,其他的忽略;

    2、AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和 FirstSuccessfulStrategy 不同,将返回所有Realm身份验证成功的认证信息;

    3、AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有 Realm身份验证成功的认证信息,如果有一个失败就失败了。

    4、ModularRealmAuthenticator 默认是 AtLeastOneSuccessfulStrategy 策略。

  • 相关阅读:
    C#项目中怎样创建和使用类和类库
    第一个存储过程程序
    C# 如何判断字符串中是否包含另一个字符串?
    word中怎么快速选中光标之前或之后的全部内容?
    DHL学习--<asp:literal
    ASP.NET后台怎么输出方法中间调试信息?
    联想THINKPAD E40的快捷键怎么关闭?哪些F1 F2 F3的键我需要用到 但是每次都按FN 太烦人了
    sql 参数化查询问题
    echarts地图 禁止高亮显示(转载)
    EChart中使用地图方式总结(转载)
  • 原文地址:https://www.cnblogs.com/XueTing/p/13734698.html
Copyright © 2011-2022 走看看