这节呢我们来学习Shiro标签,在学习之前我们必须知道授权的方式有几种:
Shiro 支持三种方式的授权:
– 编程式:通过写if/else 授权代码块完成;
– 注解式:通过在执行的Java方法上放置相应的注解完成,没有权限将抛出相应的异常;
– JSP/GSP 标签:在JSP/GSP 页面通过相应的标签完成。
之前我们在项目中已经用过编程式的授权,那么现在我们就来学习下标签吧!
首先我们得在页面导入使用shiro标签的标签库:(这个是必须要加的)
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>
那么接下来我们就可以在页面中正常的使用了:
shiro的全部标签:
那么这些标签该怎么使用呢?那我们就一一讲解吧!
authenticated 标签:用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。
notAuthenticated 标签:用户未进行身份验证,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。
user 标签:用户已经经过认证/记住我登录后显示相应的信息。
pincipal 标签:显示用户身份信息,默认调用Subject.getPrincipal() 获取,即 Primary Principal。
hasRole 标签:如果当前 Subject 有角色将显示 body 体内容。
hasAnyRoles 标签:如果当前Subject有任意一个角色(或的关系)将显示body体内容。
lacksRole:如果当前 Subject 没有角色将显示 body 体内容。
hasPermission:如果当前 Subject 有权限将显示 body 体内容。
lacksPermission:如果当前Subject没有权限将显示body体内容。
代码如下:
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<shiro:user>
1.用户《<shiro:principal></shiro:principal>》已登录
</shiro:user>
<br/><br/>
2.以游客的身份登录
<shiro:guest></shiro:guest>
<br/><br/>
3.
<shiro:hasAnyRoles name="admin,user">
<a href="admin.jsp">admin</a>
<a href="user.jsp">user</a>
</shiro:hasAnyRoles>
<br/><br/>
4.
<shiro:hasRole name="admin">
<a href="admin.jsp">admin</a>
</shiro:hasRole>
<br/><br/>
<a href="admin.jsp">admin</a>
<br/><br/>
<a href="user.jsp">user</a>
<br/><br/>
<a href="shiro/logout">登出</a>
</body>
</html>
对应的页面:
都以admin登录:
其余的标签就不一一测试,有兴趣的话自己测试下哈!