初识shiro

1、shiro
 介绍:简单的java安全框架,旨在提供一个直观而全面的认证,授权,加密及回话管理的解决方案。
 它通过简单易用的api为项目提供安全性而又无需重头编写代码。

  1 import org.apache.shiro.SecurityUtils;
  2 import org.apache.shiro.authc.*;
  3 import org.apache.shiro.config.IniSecurityManagerFactory;
  4 import org.apache.shiro.mgt.SecurityManager;
  5 import org.apache.shiro.session.Session;
  6 import org.apache.shiro.subject.Subject;
  7 import org.apache.shiro.util.Factory;
  8 import org.slf4j.Logger;
  9 import org.slf4j.LoggerFactory;
 10
 11
 12 /**
 13  * Simple Quickstart application showing how to use Shiro‘s API.
 14  *
 15  * @since 0.9 RC2
 16  */
 17 public class Quickstart {
 18
 19     private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);
 20     //指定类初始化日志对象
 21
 22     public static void main(String[] args) {
 23
 24         // The easiest way to create a Shiro SecurityManager with configured
 25         // realms, users, roles and permissions is to use the simple INI config.
 26         // We‘ll do that by using a factory that can ingest a .ini file and
 27         // return a SecurityManager instance:
 28
 29         // Use the shiro.ini file at the root of the classpath
 30         // (file: and url: prefixes load from files and urls respectively):
 31         Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
 32         SecurityManager securityManager = factory.getInstance();
 33
 34         // for this simple example quickstart, make the SecurityManager
 35         // accessible as a JVM singleton.  Most applications wouldn‘t do this
 36         // and instead rely on their container configuration or web.xml for
 37         // webapps.  That is outside the scope of this simple quickstart, so
 38         // we‘ll just do the bare minimum so you can continue to get a feel
 39         // for things.
 40         SecurityUtils.setSecurityManager(securityManager);
 41
 42         // Now that a simple Shiro environment is set up, let‘s see what you can do:
 43
 44         // get the currently executing user:
 45         Subject currentUser = SecurityUtils.getSubject();
 46
 47         // Do some stuff with a Session (no need for a web or EJB container!!!)
 48         Session session = currentUser.getSession();
 49         session.setAttribute("someKey", "aValue");
 50         String value = (String) session.getAttribute("someKey");
 51         if (value.equals("aValue")) {
 52             log.info("Retrieved the correct value! [" + value + "]");
 53         }
 54
 55         // let‘s login the current user so we can check against roles and permissions:
 56         if (!currentUser.isAuthenticated()) {
 57             UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
 58             token.setRememberMe(true);
 59             try {
 60                 currentUser.login(token);
 61             } catch (UnknownAccountException uae) {
 62                 log.info("There is no user with username of " + token.getPrincipal());
 63             } catch (IncorrectCredentialsException ice) {
 64                 log.info("Password for account " + token.getPrincipal() + " was incorrect!");
 65             } catch (LockedAccountException lae) {
 66                 log.info("The account for username " + token.getPrincipal() + " is locked.  " +
 67                         "Please contact your administrator to unlock it.");
 68             }
 69             // ... catch more exceptions here (maybe custom ones specific to your application?
 70             catch (AuthenticationException ae) {
 71                 //unexpected condition?  error?
 72             }
 73         }
 74
 75         //say who they are:
 76         //print their identifying principal (in this case, a username):
 77         log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
 78
 79         //test a role:
 80         if (currentUser.hasRole("schwartz")) {
 81             log.info("May the Schwartz be with you!");
 82         } else {
 83             log.info("Hello, mere mortal.");
 84         }
 85
 86         //test a typed permission (not instance-level)
 87         if (currentUser.isPermitted("lightsaber:weild")) {
 88             log.info("You may use a lightsaber ring.  Use it wisely.");
 89         } else {
 90             log.info("Sorry, lightsaber rings are for schwartz masters only.");
 91         }
 92
 93         //a (very powerful) Instance Level permission:
 94         if (currentUser.isPermitted("winnebago:drive:eagle5")) {
 95             log.info("You are permitted to ‘drive‘ the winnebago with license plate (id) ‘eagle5‘.  " +
 96                     "Here are the keys - have fun!");
 97         } else {
 98             log.info("Sorry, you aren‘t allowed to drive the ‘eagle5‘ winnebago!");
 99         }
100
101         //all done - log out!
102         //
103         currentUser.logout();
104
105         System.exit(0);
106     }
107 }

只是Apache提供的一个简单使用的示例,可以参考一下,今后项目遇到上手很简单。

时间: 2024-11-03 01:59:36

初识shiro的相关文章

Shiro:初识Shiro及简单尝试

Shiro 一.什么是Shiro Apache Shiro是Java的一个安全(权限)框架 作用:认证.授权.加密.会话管理.与web集成.缓存等 下载地址:http://shiro.apache.org/download.html 二.Shiro的架构 1)subject:可以与应用交互的“用户” 2)SecurityManager:相当于SpringMVC中的DispatcherServlet:是Spring的心脏,交互都由其控制.管理所有的subject且负责进行认证.授权.会话及缓存的管

shiro学习总结(一)----初识shiro

本系列内容大多总结自官网和张开涛的<跟我学Shiro> 一.shiro简介 1.1.shiro有什么用? shiro是一个功能强大使用简单的java安全框架,主要提供了五大功能: 1.认证:用户身份认证,也就是登陆: 2.授权-访问控制:通过一些配置,用户登录后会自动被赋予相应的身份和操作权限,实现访问控制: 3.密码加密-保护或隐藏数据防止被偷窥: 4.会话管理 5.缓存 shiro还支持一些辅助特性,如Web应用安全.单元测试和多线程,它们的存在强化了上面提到的五个要素. 1.2.shir

Shiro权限验证详细教程

一.Shiro介绍 1.可从本教程中明白以下几个知识点: 认识Shiro的整体架构和各组件的概念: Shiro认证.授权过程: Shiro自定义Realm. 2.Shiro简介 Shiro是Apache强大灵活的开源的安全框架,有认证.授权.企业会话管理.安全加密.缓存管理等功能. Shiro和Spring Security相比较:Shiro更加简单方便.并且可脱离Spring,Spring Security比较笨重复杂,不可脱离Spring. 3.Shiro架构图 详细图如上面所示:在这里就不

Shiro初识与总结

1.1简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序. Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shi

Apache Shiro系列四:Shiro的架构

Shiro的设计目标就是让应用程序的安全管理更简单.更直观. 软件系统一般是基于用户故事来做设计.也就是我们会基于一个客户如何与这个软件系统交互来设计用户界面和服务接口.比如,你可能会说:“如果用户登录了我们的系统,我就给他们显示一个按钮,点击之后可以查看他自己的账户信息.如果没有登录,我就给他显示一个注册按钮.” 上述应用程序在很大程度上是为了满足用户的需求而编写的,即便这个“用户”不是人,而是一个其他的软件系统.你仍然是按照谁当前正在与你的系统交互的逻辑来编写你的逻辑代码. Shiro的设计

Apache Shiro系列之五:配置

Shiro设计的初衷就是可以运行于任何环境:无论是简单的命令行应用程序还是复杂的企业集群应用.由于运行环境的多样性,所以有多种配置机制可用于配置,本节我们将介绍Shiro内核支持的这几种配置机制. 小贴士:多种配置方案: Shiro的SecurityManager是和JavaBean兼容的,所以我们可以使用诸如Java.Xml(Spring.Jboss.Guice等).YAML.Json.Groovy等配置方式.   一.基于Java代码的配置 最简单的创建并且使用SecurityManager

Shiro的身份认证(Authentication)

Authentication概述 n概述 Authentication 是指身份验证的过程--即证明一个用户实际上是不是他们所说的他们是谁.也就是说通过提交用户的身份和凭证给Shiro,以判断它们是否和应用程序预期的相匹配. n基本概念 1:Principals(身份):是Subject 的'identifying attributes(标识属性)'.比如我们登录提交的用户名. 2:Credentials(凭证):通常是只被Subject 知道的秘密值,它用来作为一种起支持作用的证据,此证据事实

shiro实现APP、web统一登录认证和权限管理

先说下背景,项目包含一个管理系统(web)和门户网站(web),还有一个手机APP(包括Android和IOS),三个系统共用一个后端,在后端使用shiro进行登录认证和权限控制.好的,那么问题来了web和APP都可以用shiro认证吗?两者有什么区别?如果可以,解决方案是什么?看着大家焦急的小眼神,接下来挨个解决上面的问题. web和APP可以用shiro统一登录认证吗? 可以.假如web和APP都使用密码登录的话,那没的说肯定是可以的,因为对于shiro(在此不会介绍shiro详细知识,只介

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的