文档章节

Apache-shiro学习

嗡嗡作响
 嗡嗡作响
发布于 2017/09/02 16:30
字数 710
阅读 16
收藏 0

1.Shiro简介

Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与Web 集成、缓存等

其中工作原理主要如图,进入后创建一个Subject(即为当前用户),然后SecurityManager管理所有Subject,这里可以理解为于SpringMVC的DispatcherServlet,最后我们Realm相当于是一个数据源,管理用户身份是否合法。

2.入门示例

@Test
public void testHelloworld() {
//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
Factory<org.apache.shiro.mgt.SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
//2、得到SecurityManager实例并绑定给SecurityUtils
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
//3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
try {
//4、登录,即身份验证
subject.login(token);
} catch (AuthenticationException e) {
//5、身份验证失败
}
Assert.assertEquals(true, subject.isAuthenticated()); //断言用户已经登录
//6、退出
subject.logout();
}

2.1、首先通过new IniSecurityManagerFactory 并指定一个ini 配置文件来创建一个SecurityManager工厂;

2.2、接着获取SecurityManager并绑定到SecurityUtils,这是一个全局设置,设置一次即可;
2.3、通过SecurityUtils得到Subject,其会自动绑定到当前线程;如果在web环境在请求结
束时需要解除绑定;然后获取身份验证的Token,如用户名/密码;
2.4、调用subject.login 方法进行登录,其会自动委托给SecurityManager.login方法进行登录;
2.5、如果身份验证失败请捕获AuthenticationException 或其子类;

2.6、最后可以调用subject.logout退出

3.与web集成

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>

必要的架包。

web.xml如图所示

<filter>
		<filter-name>shiroFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>shiroFilter</filter-name>
		<url-pattern>*.shtml</url-pattern>
	</filter-mapping>

DelegatingFilterProxy作用是自动到spring容器查找名字为shiroFilter(filter-name)的bean并把所有Filter的操作委托给它,然后将ShiroFilter 配置到spring容器即可

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager" />
</bean>

ini配置部分说明

[main]
#默认是/login.jsp
authc.loginUrl=/login
roles.unauthorizedUrl=/unauthorized
perms.unauthorizedUrl=/unauthorized
[users]
zhang=123,admin
wang=123
[roles]
admin=user:*,menu:*
[urls]
/login=anon
/unauthorized=anon
/static/**=anon
/authenticated=authc
/role=authc,roles[admin]
/permission=authc,perms["user:create"]

其中最重要的就是[urls]部分的配置,其格式是: “url=拦截器[参数],拦截器[参数]”;
即如果当前请求的url匹配[urls]部分的某个url模式,将会执行其配置的拦截器。比如anon
拦截器表示匿名访问(即不需要登录即可访问);authc拦截器表示需要身份认证通过后才
能访问;roles[admin]拦截器表示需要有admin 角色授权才能访问;而perms["user:create"]
拦截器表示需要有“user:create”权限才能访问

 

暂时就看到这里,作一个记录,下次继续更新

 

© 著作权归作者所有

共有 人打赏支持
嗡嗡作响
粉丝 1
博文 29
码字总数 21637
作品 0
成都
程序员
Apache Shiro 使用手册

很好的学习资源,谢谢kdboy博主! Apache Shiro 使用手册(一)Shiro架构介绍 http://kdboy.iteye.com/blog/1154644 Apache Shiro 使用手册(二)Shiro架构介绍 http://kdboy.iteye.com/blo...

dmrs
2015/10/18
8
0
apache-shiro 学习笔记

(一) 看到SpringSide4居然也用shiro作为安全框架,不是用的spring-security。着实有点惊讶。 apache-shiro的强大可见一斑。 (二) apache-shiro依赖的包 除此之外还有一些东西也不可少spring,...

dmrs
2015/10/18
50
0
Spring Boot [集成-Shiro]

导读: 在阅读这篇文章之前假设你已经对Apache Shiro(后面统一用Shiro作为代指)有了一定的了解,如果你还对Shiro不熟悉的话在这篇文章的结尾附有相关的学习资料,关于Shiro是用来做什么的这里...

yangrd
08/27
0
0
生产环境中 Spring Security和 Apache Shiro 哪个用的更多?各自的优缺点是什么?

已知: Spring Security 相较于 Apache Shiro 更复杂,学习成本高,仅限于Spring框架中使用,但相较于Apache Shiro在权限控制方面更灵活。 Apache Shiro比较容易,不局限于Spring框架,可以在...

RickyLi
2016/07/18
4.1K
4
Spring+Shiro+CAS整合配置笔记

一、前言 Apache Shiro与Spring Security一样是Java的一个安全框架。那为什么与Spring整合却用Shiro?不要问为什么,任性!开个玩笑:D 其实我个人是认为Spring Security太过于笨重,要写太多...

qllinhongyu
2014/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部