`
李大宝
  • 浏览: 14627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shiro-入门程序

阅读更多

1.创建一个简单shiro项目

  • 在src下创建shiro.ini配置文件

[users]

admin = 123,role1

[roles]

role1 = printer:print

 

 

用户名:admin 
密码:123 
为admin这个账户赋予role1角色,多个角色使用逗号隔开 
role1这个角色拥有printer:print 这个权限,关于这个权限的写法,后面会讲到

 

 

  • HelloWorld
package com.shiro.helloworld;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
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 HelloWorld {
    //如果不使用日志,也可以直接用System.out.println(),也就可以不用配置log4j.properties了
    private static final transient Logger log = LoggerFactory.getLogger(HelloWorld.class);

    public static void main(String[] args) {
        //获取SecurityManager的实例
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
        SecurityManager securityManager = factory.getInstance();

        SecurityUtils.setSecurityManager(securityManager);

        Subject currenUser = SecurityUtils.getSubject();
        //session的使用
        Session session = currenUser.getSession();
        session.setAttribute("key", "value");
        String value = (String) session.getAttribute("key");
        log.info("value:"+value);
        //如果还未认证
        if(!currenUser.isAuthenticated()){
            UsernamePasswordToken token = new UsernamePasswordToken("admin","123");
            token.setRememberMe(true);
            try {
                currenUser.login(token);
            } catch (UnknownAccountException uae) {
                log.info("没有该用户: " + token.getPrincipal());
            } catch (IncorrectCredentialsException ice) {
                log.info( token.getPrincipal() + " 的密码不正确!");
            } catch (LockedAccountException lae) {
                log.info( token.getPrincipal() + " 被锁定 ,请联系管理员");
            }catch (AuthenticationException ae) {
                //其他未知的异常
            }
        }
        if(currenUser.getPrincipal() != null)
            log.info("用户 "+currenUser.getPrincipal() +" 登录成功");
        //是否有role1这个角色
        if(currenUser.hasRole("role1")){
            log.info("有角色role1");
        }else{
            log.info("没有角色role1");
        }
        //是否有对打印机进行打印操作的权限
        if(currenUser.isPermitted("printer:print")){
            log.info("可以对打印机进行打印操作");
        }else {
            log.info("不可以对打印机进行打印操作");
        }
        //退出登录
        currenUser.logout();
        System.exit(0);
    }
}

 

  • 其实我们使用shiro就为了做两件事:1. 验证用户的身份,2. 验证该用户是否有进行某个操作的权限

2.Shiro的权限

2.1 简单字符串

用简单的字符串来表示一个权限,如:queryPrinter

2.2 多层次管理

  1. printer:print

    其中第一部分是权限被操作的领域(打印机),第二部分是被执行的操作

  2. 多个值

    多个值使用逗号隔开,如role1 = printer:print,printer:query 
    不一定要xxx:yyyy的形式,也可以直接使用简单字符串

  3. 可以使用*号表示所有

    比如printer:* ,表示你可以对打印机进行任何操作, 
    或者使用 *:query ,表示你在任何领域下,都有查询操作

2.2 实例级访问控制

  1. 这种情况通常会使用三个部件——第一个是域,第二个是操作,第三个是被付诸 实施的实例。如:printer:query:lp7200

    也可以使用通配符来定义,如: 
    printer:print:* 
    printer:: 
    printer:*:lp7200 
    printer:query, print:lp7200

  2. 部分省略:缺少的部件意味着用户可以访问所有与之匹配的值

    printer:print 等价于 printer:print:* 
    printer 等价于 printer:: 
    但是请记住:只能从字符串的结尾处省略部件,也就是说 
    printer:lp7200 于 并不等价于 printer:*:lp7200

 

分享到:
评论

相关推荐

    shiro-trie:使用类似于Shiro的字符串检查权限,放入Trie中

    使用类似于Shiro的字符串检查权限,并放入Trie中...在您的网络应用程序中使用shiro-trie插件也非常简单。 首先,您应该将脚本文件包含到HTML文件中: &lt; script type =" text/javascript " src =" bower_components

    Shiro-pdf教程

    **初识Shiro应用**:Apache Shiro 教程提供了一个简单的入门示例,指导开发者创建首个受Shiro保护的应用。通过这个教程,你可以了解到Shiro的基本概念和API,为后续更深入的学习打下基础。 总结来说,Apache Shiro ...

    Shiro全面教程

    《Shiro十分钟教程.docx》和《Shiro入门教程.docx》将带你快速上手 Shiro,了解基本概念和简单用法。这些教程通常会涵盖如何创建 Realm、配置 Shiro、实现用户认证和授权、以及如何在 Web 应用中使用 Shiro 过滤器...

    spring shiro整合入门

    Realm是Shiro与应用程序数据源交互的桥梁,可以连接到数据库或其他数据源验证用户凭证。 3. **自定义Realm**:通常需要根据具体业务实现自定义的Realm类,重写其中的`doGetAuthenticationInfo`和`...

    Apache-Shiro-中文参考文档.docx

    Apache Shiro 是一个全面的开源安全框架,专为简化应用程序的安全管理而设计。它涵盖了身份验证、授权、会话管理和加密等核心功能,提供了一套简单易用的API,使得开发者能够快速集成安全机制,无需深入理解底层的...

    shiro_入门教程

    - **Realms**:负责与应用程序的特定安全存储(如数据库)交互,获取认证和授权信息。 - **Session Manager**:管理用户的会话,支持跨服务器的分布式会话。 - **Cache Manager**:缓存管理器,用于提高性能,...

    Shiro入门到精通

    本课程“Shiro入门到精通”旨在帮助开发者全面理解和掌握Shiro的使用,通过与Spring Security的对比,进一步突出Shiro在实际开发中的优势和适用场景。 首先,我们来探讨Shiro的基础知识。Shiro的核心组件包括...

    shiro入门demo

    本教程将引导你入门 Shiro,通过一个简单的 demo 来理解其基本概念和用法。 1. **Shiro 的核心组件** - **Subject**: Shiro 中的核心概念,代表当前操作的用户或系统中的任何实体。它封装了认证、授权、会话和加密...

    Shiro从入门到集群搭建

    1. **Shiro入门**:通常从一个简单的"Hello, World!"程序开始,创建一个Shiro配置,定义Realm,并设置认证和授权规则。Shiro提供了一系列的注解和API,使得权限控制变得直观。例如,我们可以使用`@...

    springboot+shiro入门案例

    Apache Shiro是一款轻量级的安全框架,它提供身份验证、授权、会话管理和加密等功能,使得开发人员能够轻松地在应用程序中实现安全控制。而SpringBoot作为Spring框架的简化版,旨在简化初始化和配置过程,使开发者...

    Shiro教程-孙开涛

    - **Shiro**是一个由Apache提供的开源安全(权限控制)框架,它具有简单且易于学习的特点,非常适合新手入门。 - **适用范围**:Shiro既适用于Java SE环境,也适用于Java EE环境。这意味着无论是在桌面应用程序还是...

    Shiro入门.rar

    在这个"Shiro入门"压缩包中,包含了笔记和源码,是学习Shiro基础知识的好资源。 **一、Shiro基本概念** 1. **认证**:也称为身份验证,是确认用户身份的过程,通常通过用户名和密码进行验证。 2. **授权**:也称为...

    shiro入门案例_001.zip

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地为应用程序提供安全保障。本入门案例将带你走进 Shiro 的世界,通过一系列简单的步骤,帮助你快速理解并...

    Shiro入门实例

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,...这个"Shiro入门实例"是学习和掌握Shiro的良好起点,通过实践可以加深对Shiro的理解,为构建安全的Java应用程序打下坚实基础。

    shiro入门学习.ppt

    3. **会话管理 (Session Management)**:Shiro不仅支持Web应用中的会话管理,还能让CS(客户端-服务器)程序利用会话来控制权限。SessionManager负责管理用户的会话,包括创建、更新、删除等操作。 4. **加密 ...

    apache_shiro入门实例

    它提供了简单易用的 API,使得开发者可以快速地在应用程序中实现安全功能。本篇将带你逐步了解如何使用 Shiro 搭建一个简单的权限管理系统,并结合 Spring 进行整合。 首先,我们需要在 `web.xml` 文件中配置 Shiro...

    springboot+shiro快速入门 maven项目 可直接运行

    从文件名称列表来看,提供的压缩包可能包含了一个简单的SpringBoot+Shiro的入门示例项目。项目结构可能包括`src/main/java`目录下的Java源代码,如启动类、Shiro配置类、 Realm实现等;`src/main/resources`目录下...

    快速入门Shiro代码

    4. **Session Management(会话管理)**:Shiro不仅可以管理应用程序级别的会话,还可以跨多个应用服务器实现分布式会话管理。 在"Springboot_shiro01"这个项目中,我们可能看到以下关键部分: 1. **配置Shiro**:...

    某课网Shiro安全框架入门源码(自己敲的)

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。在这个“某课网Shiro安全框架入门源码”项目中,你将找到...

Global site tag (gtag.js) - Google Analytics