Shiro 入门demo

1、新建maven项目,引入shiro的核心依赖

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

2、在resource下新建shiro.ini

#定义用户
[users]
#用户名=密码,角色。一个用户可以对应多个角色,比如同时是绿钻、黄钻,逗号分隔即可
chy1 = abcd, common
chy2 = abcd, vip
chy3 = abcd, svip

#定义角色
[roles]
#角色=权限。可以有多个权限,逗号分隔
common = watch
vip = watch,download
svip = *

角色不能使用通配符*,但权限可以使用通配符*,表示该角色具有所有的权限,检测权限的时候能检测出来。

3、新建实体类User

public class User {
    private String name;
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

4、新建工具列UserShiro

public class UserShiro {

    /**
     * 指定SecurityManager、Realm,将User包装为Subject
     * @param user 用户
     * @return Subject shiro的认证、授权操作都要先将User包装为Subject,通过Subject来操作
     */
    public static Subject getSubject(User user) {
        //配置SecurityManager。IniSecurityManagerFactory过时了,使用DefaultSecurityManager代替
        DefaultSecurityManager securityManager = new DefaultSecurityManager();
        //.ini文件方式实现的Realm
        IniRealm realm = new IniRealm("classpath:shiro.ini");
        securityManager.setRealm(realm);

        //指定要使用的SecurityManager
        SecurityUtils.setSecurityManager(securityManager);

        //获取Subject对象
        Subject subject = SecurityUtils.getSubject();

        return subject;
    }

    /**
     * 检查用户是否是指定角色,比如student、teacher、guest,common、vip、svip等
     * @param user 用户
     * @param role 角色
     * @return boolean 该用户是否是指定的角色
     */
    public static boolean hasRole(User user, String role) {
        Subject subject = getSubject(user);
        return subject.hasRole(role);
    }

    /**
     * 获取用户对应的角色。比如百度网盘登录时在头像处要显示用户的身份标识
     * @param user
     * @return String 用户对应的角色
     */
    public static String getRole(User user){
        Subject subject = getSubject(user);
        String[] allRole = {"common", "vip", "svip"};
        //如果用户同时具有多个角色,比如同时是绿钻、黄钻,可以放在数组、集合中返回
        String role=null;
        for (String ele:allRole){
            if (subject.hasRole(ele)){
                role = ele;
                break;
            }
        }
        return role;
    }

    /**
    检查用户是否具有某项权限、可以执行某项操作,比如下载文件、极速下载
     * @param user 用户信息
     * @param permit 要检查的权限
     * @return boolean 该用户是否具有指定的权限
     */
    public static boolean isPermitted(User user, String permit) {
        Subject subject = getSubject(user);
        return subject.isPermitted(permit);
    }

    /**
     * 登录检查
     * @param user 用户登录信息
     * @return boolean 登录结果,是否匹配
     */
    public static boolean login(User user) {
        Subject subject= getSubject(user);

        //通token封装用户信息
        UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword());
        try {
            //将token与Realm中的信息进行对比。这个方法的返回值是void,如果找不到匹配,直接抛出异常
            subject.login(token);
        } catch (AuthenticationException e1) {
            //Realm中没有匹配的用户
            return false;
        }
        return true;
    }

    /**
     * 登出
     */
    public static void logout(User user){
        Subject subject = getSubject(user);
        subject.logout();
    }

}

5、新建测试类Test

public class Test {

    public static void main(String[] args) {
        User user = new User("chy3", "abcd");

        if ( UserShiro.login(user) ){
            System.out.println("登录成功");
            System.out.println("您的身份是:" + UserShiro.getRole(user));
        }
        else {
            System.out.println("用户名或密码错误");
        }

    }

}

6、运行,效果如下

登录成功
您的身份是:svip

原文地址:https://www.cnblogs.com/chy18883701161/p/12596297.html

时间: 2024-10-24 05:59:00

Shiro 入门demo的相关文章

JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

shiro介绍 什么是shiro shiro是Apache的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架.它可以实现如下的功能: 1.验证用户 2.对用户执行访问控制,如:判断用户是否具有角色admin,判断用户是否拥有访问的资源权限. 3.在任何环境下使用SessionAPI.例如C/S程序 4.可以使用多个用户数据源.例如一个是Oracle数据库,另外一个是MySQL数据库. 5.单点登录(SSO)功能

mybaits入门demo配置文件详解(二)

第一篇文章: mybaits开发环境准备及入门demo(一) 一.配置文件mybatis-config.xml 官方是这么说的:MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息 在MyBatis 的配置文件中 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//myba

mybaits入门demo映射文件详解(三)

第二篇文章:  mybaits入门demo配置文件详解(二) Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref –

RabbitMq 集成 spring boot 消息队列 入门Demo

spring boot 集成 RabbitMq还是很方便的.现在来一个简单的例子来集成rabbitmq.入门demo. 主要概念: 其中比较重要的概念有 4 个,分别为:虚拟主机,交换机,队列,和绑定. 虚拟主机:一个虚拟主机持有一组交换机.队列和绑定.为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制. 因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机.每一个RabbitMQ服务器都有一个默认的虚拟主机"/"

我的Spring入门Demo

第一步:导入Spring jar 包 Spring核心包(4个) 日志包(2个) jdbc模板支持(1个) spring-jdbc-3.2.0.RELEASE.jar 模板相关事务处理包(1个) spring-tx-3.2.0.RELEASE.jar ORM框架模板支持(1个) spring-orm-3.2.0.RELEASE.jar 第二步:增加一个Spring 配置文件    beans.xml <?xml version="1.0" encoding="UTF-8

shiro入门应用示例(采用spring+springmvc+mybatis+shiro)

原文:shiro入门应用示例(采用spring+springmvc+mybatis+shiro) 源代码下载地址:http://www.zuidaima.com/share/1550463711726592.htm shiro入门应用示例供参考(采用spring+springmvc+mybatis+shiro) 项目完整源码 链接: http://pan.baidu.com/s/1uyc7I 密码:qk0j

【转】Apache shiro集群实现 (一) shiro入门介绍

近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很详细,我在我们的项目中使用的是nosql(Redis)替代了ehcache做了session和cache的存储,接下来从shiro.Cas.redis.session等等基础知识.基本原理集成的角度来不断的深入分析,系列文章篇幅很长,很丰富,尽请期待! Apache shiro集群实现 (一) sh

WebService入门Demo

以前写博客最主要的就是不知道写什么东西,现在感觉能写点东西,就是感觉博客随笔的标题挺难取的,最近工作中刚好用到了WebService,刚好可以写一篇博客.去年工作的时候自己也用到过,只是知道调用一些WebService中的方法,想想还是写篇博客的,也就是俗话说的不要只顾低头走路,还要注意抬头看天.还是写正文吧,现在每次写博客都会会扯点有的没的,不要见怪. WebService的基本概念 WebService看名字的简单点理解就是基于Web的服务,跟普通的web程序一样遵循Http协议,接收响应外

Mybatis 3.2.7 简单入门Demo

对最新版本 Mybatis 3.2.7 做了一个demo,做个记录 需要的基本jar: mybatis-3.2.7.jar mysql-connector-java-5.1.27.jar 首先配置xml文件 mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config