Shiro的使用

shiro使用

依赖

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.9</version>
  </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>

配置

在src目录下新建resource/shori.ini文件,并在其中进行配置

在这里插入图片描述

# 用户
[users]
root=123,role1,role2
tom=123,role3
#权限
#角色
[roles]
role1=user:create,user:update
role2=user:delete
role3=user:create

测试代码

package com.qst;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) {
        //1. 加载 INI 配置
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        //2。创建 SecurityManager
        SecurityManager securityManager = factory.getInstance();

        //3. 使其可访问
        SecurityUtils.setSecurityManager(securityManager);

        //4. 通过Subject(验证工具) 用户名/密码身份验证token
        Subject subject = SecurityUtils.getSubject();
        
        // 创建一个用户(token)
        UsernamePasswordToken token = new UsernamePasswordToken("root", "123");
        token.setRememberMe(true);

        // 登录
        try{
            // 验证身份信息,不通过就会抛出异常,身份认证没有抛出异常,表示登录成功
            subject.login(token);
            String currentUser = subject.getPrincipal().toString();
            System.out.println("当前登录的用户:" + currentUser);
            // 角色
            boolean isRole = subject.hasRole("role3");
            System.out.println("当前登录的用户是否有role2角色:" + isRole);
            // 权限判断
            boolean isPer = subject.isPermitted("user:delete");
            System.out.println("当前登录的用户是否有user:delete角色:" +isPer);

            // 退出
            subject.logout();
        } catch (UnknownAccountException uae){
            System.out.println("用户名不存在");
        } catch (IncorrectCredentialsException ice){
            System.out.println("密码错误");
        } catch (LockedAccountException lae) {
            System.out.println("用户被锁定,不能登录");
        } catch (AuthenticationException ae){
            System.out.println("严重错误");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值