Shiro安全框架之集成 Web(中)


一、Url配置方式
Url 匹配方式
? 匹配一个字符 /admin? 可以匹配/admin1 /admin2 但是不能匹配/admin12 /admin
* 匹配零个或者一个或者多个字符 /admin* 可以匹配 /admin /admin1 /admin12 但是不能匹配/admin/abc
** 匹配零个或者多个路径 /admin/** 可以匹配/admin /admin/a /admin/a/b

[urls]
/login=anon
/admin=authc
/student=roles[teacher]
/teacher=perms["user:create"]

1、在admin后加个?表示可以匹配/admin1 /admin2

/admin?=authc

测试
请求http://localhost:8080/ShiroWeb/admin1或admin2
跳转到login.jsp,但请求admin 不匹配

2、在admin后加个*表示可以匹配/admin /admin1 /admin12 但是不能匹配/admin/abc
/admin*=authc
请求http://localhost:8080/ShiroWeb/admin1或admin2或admin 或admin12都可以
跳转到login.jsp

3、/**与**是一样的

二、Shiro标签的使用
举几个jsp标签授权例子
先附上ini配置文件

[main]
authc.loginUrl=/login
roles.unauthorizedUrl=/unauthorized.jsp
perms.unauthorizedUrl=/unauthorized.jsp
[users]
Robin=123456,admin
jack=123,teacher
Tom=234
Li=345
[roles]
admin=user:*
teacher=student:*
[urls]
/login=anon
/admin=authc
/student=roles[teacher]
/teacher=perms["user:create"]

使用标签要先引入 <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

1.hasRole 标签 如果当前 Subject 有角色将显示 body 体内容。
在success.jsp添加

<Shiro:hasRole name="admin">
    欢迎有admin角色的用户
</Shiro:hasRole>

测试一下 输入http://localhost:8080/ShiroWeb/admin。跳到登录页面,先输入用户名

Tom 234 因为Tom 没有admin角色 所以显示结果如下 为空

 


 
换成有admin角色的 Robin 123456 登录 显示结果如下 显示Body体的内容
 

 

2、hasPermission 标签 如果当前 Subject 有权限将显示 body 体内容。
在success.jsp 添加

<shiro:hasPermission name="student:create">
 欢迎有student:create权限的用户!<shiro:principal/>
</shiro:hasPermission>

测试:输入http://localhost:8080/ShiroWeb/login 登录有student:create权限的用户,

在ini中查找teacher角色有student所有权限,jack用户有teacher角色(jack是老师)
所以用户名 密码输入jack 123 显示结果如下

 


 
3、标签体内汉字后带<shiro:principal/> 可以显示显示登录的用户名 如1 2 中的Robin和jack
4、剩下的jsp标签不一一演示了。

三、Shiro会话机制
官方:Shiro-web jar包的org.apache.shiro.web.session.mgt包下的ServletContainerSessionManage.class 类
1、在LoginServlet.java下新加如下代码
 

// 当subject当前用户登录成功后

// 就可以用subject获取session,这个session是shiro实现的和servlet的session是一样的
//通过session可以获取id 主机地址 和session的有效期
测试后台输出如下,获取的主机ip为虚拟的  session时间为1800000毫秒
 

2、在LoginServlet.java继续添加代码如下

//session里是可以放信息的

 

将 session的数据,存放到session对象info中
到前台success.jsp中取一下后台session存放的信息,用el表达式取一下
 

测试结果如下

 

posted @ 2018-04-10 23:15  锅锅7533  阅读(172)  评论(0编辑  收藏  举报