一、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表达式取一下
测试结果如下