frame shiro 认证示例

shiro 认证流程


1、创建一个 javaSE 的maven项目(quickstart),并添加依赖

    <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.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.3.2</version>
    </dependency>
View Code

2、添加shiro.ini配置文件

  添加shiro.ini配置文件的方式是为了简单展示shiro的用法

  在resources目录创建一个文件,文件名为shiro.ini

  文件添加内容如下:  

[users]
# 模拟数据库用户列表:账号=密码
zhangsan=666
lisi=888


3、测试类代码

package com.test.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Test;

public class ShiroTest {
    @Test
    public void testLogin() {
        // 加载配置文件,创建SecurityManager 工厂对象
        Factory<SecurityManager> securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
        // 通过工厂对象,创建 SecurityManager 对象
        SecurityManager securityManager = securityManagerFactory.getInstance();
        // 将securityManager绑定到当前运行环境中:让系统可以随时随地访问securityManager对象
        SecurityUtils.setSecurityManager(securityManager);

        // 创建登陆主体,此时主体还没有经过认证
        Subject subject = SecurityUtils.getSubject();
        // 创建主体登陆的身份/凭证,即账号/密码
        UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "666");
        // 主体登陆
        subject.login(token);

        // 判断登陆是否成功
        System.out.println("登陆是否成功:" + subject.isAuthenticated());
        // 主体登出
        subject.logout();
        // 判断登陆是否成功
        System.out.println("登陆是否成功:" + subject.isAuthenticated());
    }
}
View Code

4、异常捕获

用户名不存在异常:

org.apache.shiro.authc.UnknownAccountException: Realm [org.apache.shiro.realm.text.IniRealm@6f79caec] was unable to find account data for the submitted AuthenticationToken [org.apache.shiro.authc.UsernamePasswordToken - zhangsan1, 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.

猜你喜欢

转载自www.cnblogs.com/Mike_Chang/p/9665806.html