zoukankan      html  css  js  c++  java
  • shiro之 JdbcRealm及Authentication Strategy

    1. 使用shiro框架来完成认证工作,默认情况下使用的是lniRealm。如果需要使用其他Realm,那么需要进行相关的配置。

    2.lni 配置文件讲解:[main]section是你配置应用程序的SecurityManager实例及任何它的依赖组件(如:Realms)的地方。

    [main]
    myRealm=cn.sxt.realm.MyRealm
    #依赖注入
    securityManager.realm=$myRealm

    [users]section 允许你定义一组静态的用户账户。这在大部分拥有少数用户账户或用户账户不需要在运行时被动态地创建的环境下是很有用的。

    [users]
    Zhangsan=1111
    Lisi=2222,role1,role2

    [roles]section允许你把定义在[users]section中的角色与权限关联起来。另外,这在大部分拥有少数用户账户或用户账户不需要在运行时被动态地创建的环境下是很有用的。

    [users]
    zhangsan=1111,role1
    [roles]
    role1=user:add,user:delete

    3. 使用JdbcRealm来完成身份认证。

    通过观察JdbcRealm可知,要实现JdbcReaml:

    a) 需要为jdbcRealm设置dataSource

    b) 在指定的dataSource所对应的数据库中应用户表users,该表中有username,password,password_salt等字段。

    实现步骤:

    a)新建数据库表:

    b) 配置 shiro.ini 文件:

    [main]
    #配置数据源
    dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
    dataSource.driverClass=com.mysql.jdbc.Driver
    dataSource.jdbcUrl=jdbc:mysql://localhost:3306/shiro
    dataSource.user=root
    dataSource.password=1111
    jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
    #$表示引用对象
    jdbcRealm.dataSource=$dataSource
    securityManager.realm=$jdbcRealm

    c) 猜测

    public static void main(String[] args) {
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            SecurityManager securityManager=factory.getInstance();
            SecurityUtils.setSecurityManager(securityManager);
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken token = new UsernamePasswordToken("wangwu", "1111");
            try {
                subject.login(token);
                if(subject.isAuthenticated()){
                    System.out.println("验证通过");
                }
            } catch (AuthenticationException e) {
                System.out.println("验证失败");
            }
        }

    5.  Authentication Strategy:认证策略,在shiro中有3种认证策略;

      a)AtLeastOneSuccessfulStrategy:如果一个(或更多)Realm 验证成功,则整体的尝试    被认为是成功的。如果没有一个验证成功,则整体尝试失败。

      b)FirstSuccessfulStrategy:只要有一个成功地验证的Realm返回的信息将被使用。所有进    一步的Realm 将被忽略。如果没有一个验证成功,则整体尝试失败。

      c)AllSucessfulStrategy:为了整体的尝试成功,所有配置的Realm 必须验证成功。如果没    一个验证成功,则整体尝试失败。

      默认的策略是:AtLeastOneSuccessfulStrategy

    6. 设置认证策略:

    #验证策略设置
    authenticationStrategy=org.apache.shiro.authc.pam.FirstSuccessfulStrategy
    securityManager.authenticator.authenticationStrategy=$authenticationStrategy
  • 相关阅读:
    k3 cloud采购入库单单位问题
    k3 cloud没有使用协同平台开发时候的调试方式
    k3 cloud写插件不重启IIS热更新简单配置
    k3 cloud部署包中的安装包变成了浏览器,不能安装
    逻辑门
    JDBC的架构设计
    非功能性约束之性能(1)-性能银弹:缓存
    C#性能优化杂七杂八的总结
    QT QToolTip
    IDEA spotbugs使用
  • 原文地址:https://www.cnblogs.com/forever2h/p/6855737.html
Copyright © 2011-2022 走看看