11、Shiro实战:权限标签

本文详细介绍了Apache Shiro提供的JSTL标签库,包括guest、user、authenticated、hasRole、hasPermission等常用标签的使用方法、语法示例及源码解析,帮助开发者在JSP页面中高效实现基于角色的访问控制和动态内容显示。

Shiro 提供了 JSTL 标签用于在 JSP 页面进行权限控制,如根据登录用户显示相应的页面按钮。 需要在JSP 中导入 shiro 的标签库:<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

一、常用标签
guest 标签:用户没有身份验证时显示相应信息,即游客访问信息。
 
user 标签:用户已经经过认证或记住我登录后显示相应的信息。
 
authenticated 标签:用户已经身份验证通过,即 Subject.login登录成功,不是记住我登录的。
 
notAuthenticated 标签:用户未进行身份验证,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。
 
pincipal 标签:显示用户身份信息,默认调用 Subject.getPrincipal() 获取,即 Primary Principal。
 
hasRole 标签:如果当前 Subject 有角色将显示 body 体的内容。
 
hasAnyRoles 标签:如果当前Subject有任意一个 角色将显示body体的内容。
 
lacksRole:如果当前 Subject 没有角色将显示 body 体的内容。
 
hasPermission:如果当前 Subject 有权限将显示 body 体的内容。
 
lacksPermission:如果当前Subject没有权限将显示body体的内容。
 
二、使用标签

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>    
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	
	<h4>List Page</h4>
	
	Welcome: <shiro:principal></shiro:principal>
	
	<shiro:hasRole name="admin">
	<br><br>
	<a href="admin.jsp">Admin Page</a>
	</shiro:hasRole>
	
	<shiro:hasRole name="user">
	<br><br>
	<a href="user.jsp">User Page</a>
	</shiro:hasRole>
	
	<br><br>
	<a href="shiro/logout">Logout</a>
	
</body>
</html>

三、源码解析
1、 <shiro:principal/>标签;
(1)、找到<shiro:principal/>标签,按住Ctrl打开shiro.tld
 
(2)、处理此标签的类是 org.apache.shiro.web.tags.PrincipalTag
 
(3)、获取门面对象Subject对象,拿到Subject对象里面的主凭证。主凭证可能是一个对象,比如user对象,将其地址 username 属性作为主凭证,那么可以这样配置:<shiro:principal property="username "/>
 
(4)、将数据刷新到JSP页面中。
 
2、 <shiro:hasRole/>标签;
 
获取到当前Shiro环境的Subject对象,再判断当前登录用户是否有此角色。返回1则页面显示,返回0则页面不显示。
 
3、 <shiro:hasPerssion/>标签;
 

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: