学习Shiro(三) ini认证

1.认证流程图

Shiro认证流程图

2.创建项目

2.1 创建maven中的quickstart项目

创建项目

2.2 导入pom依赖
<dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.3</version>
    </dependency>

    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.2.2</version>
    </dependency>

  </dependencies>
2.3 创建测试
2.3.1 测试代码
@Test
    public void testLogin() throws Exception{

        //1.构建或者创建出SecurityManager工厂对象,加载配置文件
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        //2.通过工厂对象,创建SecurityManager对象
        SecurityManager securityManager = factory.getInstance();

        //3.将我们SecurityManager绑定到当前运行环境中,让系统随时随地访问SecruityManager对象
        SecurityUtils.setSecurityManager(securityManager);

        //4.创建当前登录的主体 此时的主体没有经过认证  是一个空
        Subject subject = SecurityUtils.getSubject();

        //5.收集主体登录的身份与凭证(账号与密码 )
        UsernamePasswordToken token = new UsernamePasswordToken("zhangsans", "666");

        //6.主体登录
        subject.login(token);

        //7.判断登录是否成功
        System.out.println("验证登录是否成功:"+subject.isAuthenticated());

        //8.登出  注销
        subject.logout();
        System.out.println("验证登录是否成功:"+subject.isAuthenticated());


 }
2.3.1 测试的ini文件

在resources目录下创建.ini文件,下面是内容:

[users]
#模拟数据库用户列表 账号=密码
zhangsan=666
lisi=888
2.3.1 测试结果(三种不同情况的结果)
  • 正常结果:

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
验证登录是否成功:true
验证登录是否成功:false

  • 用户名不存在

抛出:org.apache.shiro.authc.UnknownAccountException: Realm [org.apache.shiro.realm.text.IniRealm@44e81672] was unable to find account data for the submitted AuthenticationToken [org.apache.shiro.authc.UsernamePasswordToken - zhangsanw, rememberMe=false].

  • 密码错误

抛出:org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false] did not match the expected credentials.

2.3.1 认证分析

认证流程分析

1. 调用subject.login(token)方法进行登录,其会自动委托给securityManager.login(subject,token)方法进行登录。
2. securityManager通过Authenticator(认证器)进行认证。
3. Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件中读取真实的用户名跟密码,这里使用的是IniRealm(shiro自带,相当于数据源)。
4. IniRealm先根据token中的账号去ini中去找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,密码匹配通过则认证通过,反之亦然。
5. 最后调用Subject.logout进行退出操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个年轻人吆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值