Shiro-认证

什么是认证

也就是身份认证,就是判断一个用户是否为合法用户的处理过程,通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令是否一致,来判断用户的身份是否正确。

关键对象

对面名称 概述
Subject(主体) 用户
Principal(身份信息) 是主体(Subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等
Credential(凭证信息) 是只有主体自己知道的安全信息,如密码、证书等

使用 ini 完成认证

在 Maven 中添加依赖 jar包,修改 pom.xml 依赖如下所示:

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

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

logging 依赖是 Shiro 所依赖的包你尽管添加就行。

添加 Shiro.ini 配置文件,首先准备一些用户身份和凭据信息(Shiro.ini)内容如下所示:

如上是在 Shiro.ini 中定义了两个用户一个是 BNTang 一个是 JonathanTang 密码为 1234

登录和退出

如上图的步骤分别为如下所解释的:

  • 构建 SecurityManager 工厂
  • 在通过工厂创建 SecurityManager
  • 在将 SecurityManager 设置到运行环境中
  • 在创建一个 Subject 实例
  • 在创建 Token 令牌
  • 用户登录
  • 用户退出

最终代码如下所示:

/**
 * @author BNTang
 */
public class Demo {

    public static void main(String[] args) {
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        SecurityManager securityManager = factory.getInstance();

        SecurityUtils.setSecurityManager(securityManager);

        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken("BNTang", "1234");

        try {
            subject.login(token);
        } catch (UnknownAccountException e) {
            System.out.println("用户名不存在");
            e.printStackTrace();
        } catch (IncorrectCredentialsException e) {
            System.out.println("密码错误");
            e.printStackTrace();
        }

        System.out.println("是否认证" + subject.isAuthenticated());

        subject.logout();

        System.out.println("是否认证" + subject.isAuthenticated());
    }
}
posted @ 2020-10-29 16:03  BNTang  阅读(58)  评论(0编辑  收藏  举报