一、shiro初始学习,使用ini完成认证

1、创建项目,pom.xml中<dependencies></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.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.2.1</version>
    </dependency>

resources资源文件下创建shiro.ini,添加内容

[users]
zhangsan=666
lisi=888

 创建测试类ShiroTest

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;

/**
 * 测试shiro认证
 */
public class ShiroTest
{
    /**
     * Rigorous Test :-)
     */
    @Test
    public void testLogin() throws Exception{
        //1、创建securityManager工厂对象:加载配置文件,创建工厂对象
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
        // 2、通过工厂对象,创建SecurityManager对象  单例模式,有一个private的构造函数,使得不能用new来实例化对象,只能调用getInstance()保证了每次调用都返回相同的对象。
        SecurityManager securityManager = factory.getInstance();
        // 3、将securityManager绑定到当前运行环境中,让系统随时随地可以访问securityManager对象
        SecurityUtils.setSecurityManager(securityManager);
        // 4、创建当前登录的主体,注意:此时主体没有经过认证
        Subject subject = SecurityUtils.getSubject();
        // 5、绑定主体登录的身份凭证,即账号密码
        // 参数1表示将要登录的用户名,参数2表示登录用户的密码
        // 账号密码错误是分别出现不同的异常错误找不到账户异常/账号正常,密码错误异常,根据异常错误可以向前台反馈不同的数据信息,用try catch
        UsernamePasswordToken token = new UsernamePasswordToken("zhangsan","666");
        // 6、主题登录
        try {
            subject.login(token);
            // 操作成功操作
        } catch (Exception e) {
            // 登录失败操作
        }
        // 7、判断登录是否成功
        System.out.println("登录是否成功:" + subject.isAuthenticated());
        // 8、注销登录
        subject.logout();
        System.out.println("登录是否成功:" + subject.isAuthenticated());
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41996632/article/details/85307427