博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache-shiro学习
阅读量:6210 次
发布时间:2019-06-21

本文共 2513 字,大约阅读时间需要 8 分钟。

hot3.png

1.Shiro简介

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

160620_MqP6_3429289.png

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

2.入门示例

@Testpublic void testHelloworld() {//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManagerFactory
factory =new IniSecurityManagerFactory("classpath:shiro.ini");//2、得到SecurityManager实例并绑定给SecurityUtilsorg.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集成

org.apache.shiro
shiro-web
1.2.2
junit
junit
4.9
commons-logging
commons-logging
1.1.3
org.apache.shiro
shiro-core
1.2.2

必要的架包。

web.xml如图所示

shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
shiroFilter
*.shtml

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

ini配置部分说明

[main]#默认是/login.jspauthc.loginUrl=/loginroles.unauthorizedUrl=/unauthorizedperms.unauthorizedUrl=/unauthorized[users]zhang=123,adminwang=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”权限才能访问

 

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

 

转载于:https://my.oschina.net/u/3429289/blog/1527941

你可能感兴趣的文章
Redis学习笔记~conf自主集群模式
查看>>
大数据系列之Kafka安装
查看>>
CDH3U3 FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught.
查看>>
40个Java多线程问题总结
查看>>
导航,头部,CSS基础
查看>>
【我的《冒号课堂》学习笔记】设计模式(2)结构模式
查看>>
计算机网络原理精讲第四章--网络层
查看>>
JSP 错题
查看>>
路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)
查看>>
C学习笔记(四)格式化输入输出
查看>>
int float string按宽度精度输出
查看>>
乐1S 5.8(Android 6.0) 刷第三方recovery并刷入root权限
查看>>
python操作mysql数据库增删改查的dbutils实例
查看>>
【算法学习笔记】72.LCS 最大公公子序列 动态规划 SJTU OJ 1065 小M的生物实验1
查看>>
常用正则表达式
查看>>
mySql数据库中的数据类型
查看>>
卷积网络基础(卷积层和全连接层)
查看>>
HandlerMethodArgumentResolver完美解决 springmvc注入参数多传报错
查看>>
Spring4 基本使用
查看>>
通知协议KVO的用法
查看>>