• 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
  • 相关阅读:
    分享——张南《从Desktop到Mobile的自动化测试实践》
    GTAC 2015将于11月10号和11号召开
    2015 Selenium大会
    最近订阅的视频
    Episode 388: Testing vs Monitoring
    中国移动测试大会 PPT 和视频
    首届中国移动互联网测试大会在北京圆满闭幕
    推荐——吴晓波频道
    移动测试会Ebay沙龙PPT
    「中国移动互联网测试大会」报名开始啦!
  • 原文地址:https://www.cnblogs.com/forever2h/p/6855737.html
Copyright © 2020-2023  润新知