细说shiro之三:在独立应用中使用shiro

官网:https://shiro.apache.org/

 

1. 下载
在非Web环境的独立应用中使用Shiro时,只需要shiro-core组件。
在Maven项目中的依赖配置如下:

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

<!-- Shiro uses SLF4J for logging. We'll use the 'simple' binding in this example app. See http://www.slf4j.org for more info. --> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.6.1</version> </dependency>

特别地!Shiro使用了日志框架slf4j,因此需要对应配置指定的日志实现组件,如:log4j,logback等。
在此,使用slf4j的简单日志实现slf4j-simple。


2. 数据源配置
在Shiro中,Realm定义了访问数据的方式,用来连接不同的数据源,如:LDAP,关系数据库,配置文件等等。
Realm类图:

也就是说,可以根据实际需求及应用的权限管理复杂度灵活选择指定数据源。
在此,以org.apache.shiro.realm.text.IniRealm为例,具体配置如下:

shiro.ini:

# =============================================================================
# Tutorial INI configuration
#
# Usernames/passwords are based on the classic Mel Brooks' film "Spaceballs" :)
# =============================================================================# -----------------------------------------------------------------------------
# Users and their (optional) assigned roles
# username = password, role1, role2, ..., roleN
# -----------------------------------------------------------------------------
[users]
root = secret, admin
guest = guest, guest
presidentskroob = 12345, president
darkhelmet = ludicrousspeed, darklord, schwartz
lonestarr = vespa, goodguy, schwartz# -----------------------------------------------------------------------------
# Roles with assigned permissions
# roleName = perm1, perm2, ..., permN
# -----------------------------------------------------------------------------
[roles]
admin = *
schwartz = lightsaber:*
goodguy = winnebago:drive:eagle5

选择了数据源,现在开始使用Shiro进行认证和访问授权控制。

 

3. 认证
在Shiro中,认证即执行用户登录,读取指定Realm连接的数据源,以验证用户身份的有效性与合法性。

String name = "lonestarr";
String pass = "vespa";
Subject currentUser = SecurityUtils.getSubject();
if(!currentUser.isAuthenticated()) {UsernamePasswordToken token = new UsernamePasswordToken(name, pass);token.setRememberMe(true);try {currentUser.login(token);} catch (UnknownAccountException e) {logger.error(String.format("user not found: %s", name), e);} catch(IncorrectCredentialsException e) {logger.error(String.format("user: %s pwd: %s error", name, pass), e);} catch (ConcurrentAccessException e) {logger.error(String.format("user has been authenticated: %s", name), e);} catch (AuthenticationException e) {logger.error(String.format("account except: %s", name), e);}
}
logger.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." );

 

4. 访问授权
在Shiro中,访问授权即验证用户是否具备执行指定操作的权限(角色或权限验证)。
特别地!在执行访问授权验证之前,必须执行用户认证。

String role = "schwartz";
if(currentUser.hasRole(role)) {logger.info(String.format("用户: %s 属于角色:%s", name, role));
}else{logger.error(String.format("用户: %s 不属于角色:%s", name, role));
}String perm = "lightsaber:cc";
if(currentUser.isPermitted(perm)) {logger.info(String.format("用户: %s 拥有权限:%s", name, perm));
}else {logger.error(String.format("用户:%s 没有权限:%s", name, perm));
}

 

5. 完整示例
详见:https://git.oschina.net/cchanghui/test-shirocli.git

 

转载于:https://www.cnblogs.com/nuccch/p/6780550.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、C#基础 - Visual Studio 的版本选择和下载

有句话说&#xff1a;工欲善其事&#xff0c;必先利其器&#xff0c;我不推荐在学习一个语言时使用记事本练习&#xff0c;甚至说相当的排斥。当然了&#xff0c;你也可以选择你自己喜欢的方式。本系列推荐使用的IDE为vs2017 community版&#xff0c;银子不够的同志不用怕&…

红外摄像机的原理及选择

一、红外基本原理介绍 光是一种电磁波&#xff0c;它的波长区间从几个纳米&#xff08;1nm10-9m&#xff0c;十亿分之一米&#xff09;到 1 毫米&#xff08;mm&#xff09;左右。人眼可见的只是其中一部分&#xff0c;我们称其为可见光&#xff0c;可见光的波长范围为 380nm …

P3375 【模板】KMP字符串匹配

题目描述 如题&#xff0c;给出两个字符串s1和s2&#xff0c;其中s2为s1的子串&#xff0c;求出s2在s1中所有出现的位置。 为了减少骗分的情况&#xff0c;接下来还要输出子串的前缀数组next。如果你不知道这是什么意思也不要问&#xff0c;去百度搜[kmp算法]学习一下就知道了。…

php 原生文件下载

1.整个网页的html界面源码下载: xiazai.php <html> <head> <meta charset "utf-8"> <title></title> </head> <body> <form method"post" action"xiazai.php"> <input type"submit&quo…

asp 之 让实体中字段类型为DateTime的字段仅仅显示日期不显示时间

在我们平时的工作开发中。我们一般会遇到这种一个问题&#xff1a;某个实体的某个字段是DateTime类型的&#xff0c;但是我们在界面上仅仅想让它显示日期不显示时间&#xff01;一个订单实体&#xff1a;//订单类public class order{//订单IDpublic int id{get;set;}//物品IDpu…

Linux下配置LVM

1 LVM介绍LVM(Logical Volume Manager)逻辑卷管理&#xff0c;它是Linux环境下对磁盘分区进行管理的一种机制&#xff0c;LVM是建立在硬盘和分区之上的一个逻辑层&#xff0c;来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区&#xff0c;逻辑卷管理器的技术…

激光摄像机的原理及应用

近年来&#xff0c;在安防监控领域&#xff0c;以目前视频监控技术的发展情况&#xff0c;室内监控和白天正常环境下的监控已不是难题&#xff0c;但社会环境的发展日新月异&#xff0c;城市的发展、森林资源的不断流失、大型项目的建设、边防安全的守护等&#xff0c;这些环境…

Object.defineProperty 详解

最近想了解一下Vue是怎么实现数据双向绑定的&#xff0c;了解到是基于Object.definProperty,在此记录一下。 Object.defineProperty  顾名思义&#xff0c;就是给对象定义一个属性&#xff0c;总共有这么几种&#xff1a; value  属性的值writable  是否可改写&#xff0…

相机帧率和曝光时间的关系

文章转载自&#xff1a;http://blog.163.com/pluto_918/blog/static/203853902012111255634175/ 工业相机参数之帧率相关知识详解&#xff1a; 工业相机是机器视觉系统的重要组成部分之一&#xff0c;在机器视觉系统中有着非常重要的作用。工业相机已经被广泛应用于工业生产线…

SlickOne 敏捷开发框架介绍(二) -- 多用户/多租户/SAAS软件基础框架实现

前言&#xff1a;在应用于集团版客户或SAAS平台服务的业务系统中&#xff0c;流程管理系统需要支持多用户组织模型。其中包括角色数据、流程定义数据和流程实例数据的多用户标识绑定。本文旨在全面描述如何基于SlickOne敏捷开发框架实现上述基础服务功能&#xff0c;形成一个完…

工业相机行曝光与全局曝光

工业相机行曝光与全局曝光 逐行曝光&#xff1a; 图1 逐行曝光模式 逐行曝光sensor 实现如图1逐行曝光模式所示。与全局曝光不同&#xff0c;逐行曝光从第一行开始曝光&#xff0c;一个行周期之后第二行才开始曝光。依次类推&#xff0c;经过N-1 行后第N 行开始曝光。第一行曝光…

【Alpha阶段汇总】成果展示与体验总结

一、燃尽图 二、软件截图 三、代码与图片、音乐素材仓库 git仓库 四、问题与总结 1.git提交问题 之前创建的仓库地址是http://git.oschina.net/8265559926/groupnet14 但是无论怎么输入都说找不到仓库 经反复思考&#xff0c;感觉可能是因为地址不是纯字母的原因。就重新注册了…

JDBC批量操作性能提升

JDBC当使用INSERT INTO....VALUES()语句批量插入的时候&#xff0c;应该使用JDBC的PreparedStatement的批量操作方法&#xff0c;而不是採用一条一条运行的方法。比如&#xff08;来源&#xff1a;http://superjavason.iteye.com/blog/255423&#xff09;&#xff1a;如上图&am…

SVAC 2.0安全系统组成

SVAC2.0标准的一个很主要的特点就是视频安全和加密认证相比SVAC1.0更加规范&#xff0c;在视频安全方面更加重视。 通过信源层面的加密技术&#xff0c;实现端到端视频数据加密&#xff0c;构建更强大、更完整的视频安全体系。基于SVAC 2.0标准研究建立的安全系统&#xff08;…

【技术知识】SVAC 2.0安全技术浅析

2017-09-26 08:52 加密可以有效保护数据的机密性&#xff0c;防止非授权访问和非法监听。签名可以识别视音频的产生源以及所对应的视音频数据是否完整或被篡改。SVAC 2.0标准规定了加密和签名接口及数据格式&#xff0c;支持对数据的安全保护&#xff0c;以统一的语法格式支持…

别再管你的API叫微服务了

你有没有听过这句名言&#xff1a;“计算机科学领域只有两个难题&#xff0c;缓存失效和命名”&#xff1f;据说这句话是Phil Karlton在1996年或1997年左右说的。围绕这句格言确实出现了很多带有喜剧色彩的说法&#xff0c;它们也提到了其他的一些问题&#xff0c;但最近我对AP…

第一篇JavaScript基础

1.什么是JavaScript 2.核心语法&#xff0c;变量 先声明&#xff0c;再赋值 var i;i0; 同时声明并赋值变量 var x,y,z0; 不声明直接赋值u2&#xff08;变量可以不经过声明直接赋值&#xff0c;但是容易出错&#xff0c;这种方法不建议采纳&#xff09;3. 3.核心语法&#xff0…

透过迷雾不再迷茫 浅析海康威视透雾技术

频监控的需求主要分为两类&#xff0c;白天的需求和夜间的需求。夜间效果主要的提升之道以低照度和补光居多&#xff0c;也就造成了现在市面上白光补光、红外补光、激光补光等各式各样的摄像机盛行;非补光类的&#xff0c;当属星光级超级照度是为当下热门。而关于白天效果的提升…

抓包工具

前言&#xff1a; Charles是在 Mac 下常用的网络封包截取工具&#xff0c;在做移动开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。 一、主界面介绍 二、网页抓包 启动 Charles 后&#xff0c;需要将 Charles 设置成系统代理…

详解Session分布式共享(.NET CORE版)

一、前言&回顾 在上篇文章Session分布式共享 Session Redis Nginx中&#xff0c;好多同学留言问了我好多问题&#xff0c;其中印象深刻的有&#xff1a;nginx挂了怎么办&#xff1f;采用Redis的Session方案与微软Session方案相比&#xff0c;有什么优势呢&#xff1f;Co…