美文网首页
Shiro 入门实例

Shiro 入门实例

作者: 索伦x | 来源:发表于2019-06-04 23:16 被阅读0次

首先创建一个空 Maven 工程:略

添加依赖

在pom.xml中加入jar包的配置:

<dependencies>
    <!--shiro核心类库-->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!--日志工具包-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencies>

配置文件

log4j.properties

log4j.rootLogger=INFO, stdout, 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

shiro.ini

#用户名=密码,角色1,角色2...,角色n
[users]
root = secret, admin
guest = guest, guest
test = 123456, role1, role2
# -----------------------------------------------------------------------------
# Roles with assigned permissions
# roleName = perm1, perm2, ..., permN
# 角色名=权限1,权限2...权限n
# -----------------------------------------------------------------------------
[roles]
admin = *
guest = guest
role1=perm1,perm2
role2=perm3
配置说明:
  • 配置文件中包含两个部分用户[users]和角色[roles]
  • 用户配置的格式是:
    用户名=密码,角色1,角色2,...角色n
    如:test=123456,role1,role2
    用户名是 test,密码是123456,拥有两个角色role1和role2
  • 一个用户可以具有多个角色。注意逗号是英文的。
  • 角色配置的格式是:
    角色名=权限1,权限2…权限n
    如:
    role1=perm1,perm2
    角色名是role1,拥有perm1和perm2两个权限。

测试代码

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.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ShiroTest {
    private static final transient Logger log =
            LoggerFactory.getLogger(ShiroTest.class);

    public static void main(String[] args) {
        //1. 这里的SecurityManager是org.apache.shiro.mgt.SecurityManager
        // 而不是java.lang.SecurityManager
        // 加载配置文件
        Factory<SecurityManager> factory =
                new IniSecurityManagerFactory("classpath:shiro.ini");
        //2.解析配置文件,并且返回一些SecurityManger实例
        SecurityManager securityManager = factory.getInstance();
        //3.将SecurityManager绑定给SecurityUtils
        SecurityUtils.setSecurityManager(securityManager);
        // 安全操作,Subject是当前登录的用户
        Subject currentUser = SecurityUtils.getSubject();

        // 测试在应用的当前会话中设置属性
        Session session = currentUser.getSession();
        //放进去一个key和一个value
        session.setAttribute("someKey", "aValue");
        //根据key拿到value
        String value = (String) session.getAttribute("someKey");
        if ("aValue".equals(value)) {//比较拿到的值和原来的值是否一致
            log.info("检索到正确的值[" + value + "]");
        }
        //尝试进行登录用户,如果登录失败了,我们进行一些处理
        if (!currentUser.isAuthenticated()) {//如果用户没有登录过
            //new UsernamePasswordToken(用户名,密码)
            UsernamePasswordToken token =
                    new UsernamePasswordToken("test", "123456");
            token.setRememberMe(true);//是否记住用户
            try {
                currentUser.login(token);
                //当我们获登录用户之后
                log.info("用户 [" + currentUser.getPrincipal() + "] 登陆成功");
                // 查看用户是否有指定的角色
                if (currentUser.hasRole("admin")) {
                    log.info("您有admin角色");
                } else {
                    log.info("您没有admin角色");
                }
                if (currentUser.hasRole("role1")) {
                    log.info("您有role1角色");
                } else {
                    log.info("您没有role1角色");
                }

                // 查看用户是否有某个权限
                if (currentUser.isPermitted("perm1")) {
                    log.info("您有perm1权限");
                } else {
                    log.info("您没有perm1权限");
                }
                if (currentUser.isPermitted("guest")) {
                    log.info("您有guest权限");
                } else {
                    log.info("您没有guest权限");
                }
                //登出
                currentUser.logout();
            } catch (UnknownAccountException uae) {
                log.info(token.getPrincipal() + "账户不存在");
            } catch (IncorrectCredentialsException ice) {
                log.info(token.getPrincipal() + "密码不正确");
            } catch (LockedAccountException lae) {
                log.info(token.getPrincipal() + "用户被锁定了 ");
            } catch (AuthenticationException ae) {
                //无法判断是什么错了
                log.info(ae.getMessage());
            }
        }
    }
}

相关文章

  • Shiro 入门实例

    首先创建一个空 Maven 工程:略 添加依赖 在pom.xml中加入jar包的配置: 配置文件 log4j.pr...

  • Shiro权限验证详细教程

    Shiro权限验证详细教程 目录 一、Shiro介绍 二、第一个实例(初识Shiro认证/授权) 三、第二个实例(...

  • Java框架--Shiro入门

    目录 shiro 是什么? shiro 可以解决什么问题? shiro 名词解释&认证流程 shiro 快速入门 ...

  • Shiro官网学习记录

    ​ 官网文档很适合入门,搬运一波入门教程 ​ Shiro框架学习 ​ shiro.ini ​ Quic...

  • Shiro学习笔记

    一 、Shiro入门 1.简介 Apache Shiro 是 Java 的一个安全(权限)框架。 Shiro 可以...

  • 权限框架 - shiro 简单入门实例

    前面的帖子简单的介绍了基本的权限控制,可以说任何一个后台管理系统都是需要权限的 今天开始咱们来讲讲Shiro 首先...

  • shiro1.0_目录

    shiro1.5.3官网地址 大神翻译 目录列表 1. shiro1.1_介绍 2. shiro1.2_入门 3....

  • Shiro入门

    Shiro来控制权限 首先我们需要来创建一个RBAC模型(图片网上找的) 数据库模型建好以后便可进行配置:我们在项...

  • Shiro入门

    Shiro 什么是Shiro? Apache Shiro 是一个Java的安全框架。 关于shiro的相关概念: ...

  • shiro入门

    ApacheShiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理。 Shiro...

网友评论

      本文标题:Shiro 入门实例

      本文链接:https://www.haomeiwen.com/subject/qfedxctx.html