Apache Shiro系列三,概述 —— 10分钟入门
一、介绍
看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro。以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定。
二、概述
关于Shiro的废话就不多说了,详情可以看本系列第一篇博文:Apache Shiro系列一:初识
Apache Shiro可以做什么?
答案是很多,但是在这里我们就不展开说了,如果对这个有兴趣,可以去看Shiro的特性。
三、下载
1)确保安装了1.6及其以上版本的JDK,以及3.0.3以上版本的maven;
2)从Download 页面下载最新版本的”Source Code Distribution”,我们下面的例子将使用1.3.2版本;
3)解压;
4)进入到quickstart目录;
$ cd shiro-root-1.3.2/samples/quickstart
5)运行quickstart;
$ mvn compile exec:java
在看本入门文档的过程中,可以打开源文件samples/quickstart/src/main/java/Quickstart.java,并且随意修改以测试你的想法。
四、QuickStart.java
下面我们来分解说明Quickstart.java内的源码以便你可以更好的理解。
在任何环境下你都可以通过如下代码来获取当前登录的用户。
Subject currentUser =SecurityUtils.getSubject();
所谓Subject其实就是其他系统中的User,这里只是换一个说法,因为能够登录系统的不仅仅是人,还有其他系统。
如果是在一个独立的应用程序中调用getSubject(),我们会得到一个应用程序本地登录的用户信息,如果是一个web应用,则会得到一个和当前线程或者当前的session相关的用户。
不管怎么样,现在你得到了一个用户了,接下来可以做什么呢?
如果你想要让某些数据在当前用户登录会话期间内一直有效,则可以像下面这么做:
Session session = currentUser.getSession();
session.setAttribute("someKey","aValue");
我们可以把这个Session当成是HttpSession在Shiro中的特殊实现,他和HttpSession有着相似的接口,大家用起来不会陌生。但是他还有一个额外的好处:不依赖于HTTP的上下文环境。这样你就可以在一个非web应用(比如类似于本例子的命令行程序)中使用Session了。
如果是在一个Web应用程序中使用Session,则返回的Session是一种基于HttpSession的实现;而如果是在一个非web环境下使用,则默认使用的是Enterprise Session。不管怎么样,这意味着我们不用理会应用程序的部署环境,总是使用相同的API来操作session,带来一致的用户体验。现在,web应用和非web应用可以共享session数据了。
到目前为止,我们得到了一个Subject以及他的Session,现在我们用它们来做点有实际意义的事情怎么样,比如检查一下这个用户是否有权限做某件事情?
我们可以为一个已知的用户做这些检查。我们上文中的Subject代表着当前用户,但是截至目前来说,谁是当前用户呢?在真正登录之前,Subject表示的是一个匿名用户。下面让我们来看看登录怎么做。
if(!currentUser.isAuthenticated()){
//collect user principals and credentials in a gui specific manner
//such as username/password html form, X509 certificate, OpenID, etc.
//We'll use the username/password example here since it is the most common.
//(do you know what movie this is from? ;)
UsernamePasswordToken token =newUsernamePasswordToken("lonestarr","vespa");
//this is all you have to do to support 'remember me' (no config - built in!):
token.setRememberMe(true);
currentUser.login(token);
}
就这样,简单的不能再简单了。
try{
currentUser.login( token );
//if no exception, that's it, we're done!
}catch(UnknownAccountException uae ){
//username wasn't in the system, show them an error message?
}catch(IncorrectCredentialsException ice ){
//password didn't match, try again?
}catch(LockedAccountException lae ){
9 //account for that username is locked - can't login. Show them a message?
}
... more types exceptions to check if you want ...
}catch(AuthenticationException ae ){
//unexpected condition - error?
}
//print their identifying principal (in this case, a username):
log.info("User ["+ currentUser.getPrincipal()+"] logged in successfully.");
我们也可以测试一下看当前用户是否拥有某个角色。
if( currentUser.hasRole("schwartz")){
log.info("May the Schwartz be with you!");
}else{
log.info("Hello, mere mortal.");
}
if( currentUser.isPermitted("lightsaber:weild")){
log.info("You may use a lightsaber ring. Use it wisely.");
}else{
log.info("Sorry, lightsaber rings are for schwartz masters only.");
}
if( currentUser.isPermitted("winnebago:drive:eagle5")){
log.info("You are permitted to 'drive' the 'winnebago' with license plate (id) 'eagle5'. "+"Here are the keys - have fun!");
}else{
log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
}
真是小菜一碟,不是吗?
currentUser.logout();//removes all identifying information and invalidates their session too.
Apache Shiro系列三,概述 —— 10分钟入门的更多相关文章
- Apache Shiro系列之五,概述 —— 配置
Shiro设计的初衷就是可以运行于任何环境:无论是简单的命令行应用程序还是复杂的企业集群应用.由于运行环境的多样性,所以有多种配置机制可用于配置,本节我们将介绍Shiro内核支持的这几种配置机制. ...
- Apache Shiro系列四,概述 —— Shiro的架构
Shiro的设计目标就是让应用程序的安全管理更简单.更直观. 软件系统一般是基于用户故事来做设计.也就是我们会基于一个客户如何与这个软件系统交互来设计用户界面和服务接口.比如,你可能会说:“如 ...
- kafka原理和实践(一)原理:10分钟入门
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- Markdown - Typora 10分钟入门 - 精简归纳
Markdown - Typora 10分钟入门 - 精简归纳 JERRY_Z. ~ 2020 / 8 / 22 转载请注明出处! 目录 Markdown - Typora 10分钟入门 - 精简归纳 ...
- Apache Shiro系列一,概述 —— 初识
一.什么是Shiro Apache Shiro是一个强大.灵活.开源的安全框架,它支持用户认证.权限控制.企业会话管理以及加密等. Apache Shiro的第一个也是最重要的一个目标就是易于使用和理 ...
- Apache Shiro系列教程之二:十分钟上手Shiro
在本教程中,我们会写一个简单的.仅仅输出一些内容命令行程序,从而对Shiro有一个大体的感觉. 一.准备工作 本教程需要Java1.5+,并且我们用Maven生成项目,当然Maven不是必须的,你也可 ...
- [入门到吐槽系列] Webix 10分钟入门 一 管理后台制作
前言 本人是服务端程序员,同时需要兼职前端开发.常用的就是原生态的HTML.Javascript,也用过ExtJS.Layui.可是ExtJS变公司后非常难用.Layui上手还行,用过一段时间,会觉得 ...
- [入门到吐槽系列] Webix 10分钟入门 二 表单Form的使用
前言 继续接着上一篇的webix入门:https://www.cnblogs.com/zc22/p/15912342.html.今天完成剩下两个最重要的控件,表单和表格的使用.掌握了这两个,整个Web ...
随机推荐
- (原) 2.1 Zookeeper原生API使用
本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...
- 【一次面试】再谈javascript中的继承
前言 面向对象编程是每次面试必问的知识点,而前端js如何实现继承每次命中率高达80% 这不,近两天我们面试时候,同事就问道面试者此问题,但是,不论之前自己做的回答,还是面试者的回答,基本都不太令人满意 ...
- MySQL相关
1.进入安装目录 cd E:\ZYXDocument\Software\mariadb-10.0.20-win32\bin 2.安装mysql服务将E:\ZYXDocument\Software\ma ...
- Android View的几个位置坐标关系
1. View的边界,left, top, right, bottom(即左上右下),这些值都是相对View的父容器说的: 2. View的x, translationX, y, translatio ...
- iOS开发之第三方库的学习--hpple的使用
前言:因为在开发中很可能会遇到html解析,如果后台提供的数据只有html数据,或者开发的app需要从web前端的html里获取数据,就需要html解析工具了. 关于HTML解析库,可以阅读:收集几个 ...
- ionic day01教程第一天之多平台运行(ios & android)
一.创建项目 创建项目 ionic start myApp 运行项目 (1)通过浏览器运行项目 进入项目,后运行ionic serve cd myApp ionic serve 浏览器运行效果 二.多 ...
- 分布式集群系统下的高可用session解决方案
目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制. 目前,在集群系统下实现session统一的有如下几种 ...
- oradebug/strace/pstack等分析数据库性能问题系列一
对于性能问题或者一些比较奇怪妖异的问题,有很多点可以着手去分析. 准备写一个系列关于用ash/dba_hist_active_sess_history,用oradebug,用linux命令strace ...
- [转]ASP.NET Core 之 Identity 入门(三)
本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity3.html 前言 在上一篇文章中,我们学习了 CookieAuthentica ...
- Python学习记录day4
a:focus { outline: 5px auto -webkit-focus-ring-color } a:hover,a:active { outline: 0 } a { color: #0 ...