本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
我在3月初定的计划是4月底百度收录量达到1000,最近两天百度收录量不增反降,压力巨大啊!继续前面的文章,本文我们学习Shiro的jsp标签的相关知识。
Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮。
使用 Shiro 标签,我们首先要做的就是导入Shiro的标签库。
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义。
<shiro:guest> 标签
<shiro:guest> 欢迎游客访问,<a href="${pageContext.request.contextPath}/login.jsp">登录</a> </shiro:guest>
用户没有身份验证时显示相应信息,即游客访问信息。
<shiro:user> 标签
<shiro:user> 欢迎[]登录,<a href="${pageContext.request.contextPath}/logout">退出</a> </shiro:user>
用户已经身份验证/记住我登录后显示相应的信息。
<shiro:authenticated> 标签
<shiro:authenticated> 用户[]已身份验证通过 </shiro:authenticated>
用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。
<shiro:notAuthenticated> 标签
<shiro:notAuthenticated> 未身份验证(包括记住我) </shiro:notAuthenticated>
用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。
<shiro: principal/> 标签
<!-- 显示用户身份信息,默认调用Subject.getPrincipal()获取,即Primary Principal。 --> <shiro:principal type="java.lang.String"/> <shiro:principal property="username"/> <!-- 相当于((User)Subject.getPrincipals()).getUsername()。 -->
<shiro:hasRole> 标签
<shiro:hasRole name="admin"> 用户[]拥有角色admin<br/> </shiro:hasRole>
如果当前Subject有角色将显示body体内容。
<shiro:hasAnyRoles> 标签
<shiro:hasAnyRoles name="admin,user"> 用户[]拥有角色admin或user<br/> </shiro:hasAnyRoles>
如果当前Subject有任意一个角色(或的关系)将显示body体内容。
<shiro:lacksRole> 标签
<shiro:lacksRole name="abc"> 用户[]没有角色abc<br/> </shiro:lacksRole>
如果当前Subject没有角色将显示body体内容。
<shiro:hasPermission> 标签
<shiro:hasPermission name="user:create"> 用户[]拥有权限user:create<br/> </shiro:hasPermission>
如果当前Subject有权限将显示body体内容
<shiro:lacksPermission> 标签
<shiro:lacksPermission name="org:create"> 用户[]没有权限org:create<br/> </shiro:lacksPermission>
如果当前Subject没有权限将显示body体内容。
Shiro 自定义标签
Shiro 自定义标签非常简单,不像jsp标签那么麻烦。首先我们需要在WEB-INF新建一个tags文件夹,里面定义一个hasAllPermissions.tag文件。文件内容如下:
<%@ tag import="org.apache.shiro.util.StringUtils" %> <%@ tag import="org.apache.shiro.SecurityUtils" %> <%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> <%@ attribute name="name" type="java.lang.String" required="true" description="权限字符串列表" %> <%@ attribute name="delimiter" type="java.lang.String" required="false" description="权限字符串列表分隔符" %><% if(!StringUtils.hasText(delimiter)) { delimiter = ",";//默认逗号分隔 } if(!StringUtils.hasText(name)) { %> <jsp:doBody/> <% return; } String[] roles = name.split(delimiter); if(!SecurityUtils.getSubject().isPermittedAll(roles)) { return; } else { %> <jsp:doBody/> <% } %>
这就是一个 Shiro 自定义标签,非常简单。我们在使用时倒入我们自定义的标签即可。代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> <%@taglib prefix="xttblog" tagdir="/WEB-INF/tags" %> <html> <body> <xttblog:hasAllPermissions name="user:create,user:update"> 用户[]拥有权限user:create和user:update<br/> </xttblog:hasAllPermissions> </body> </html>
本文涉及的源代码下载链接:http://pan.baidu.com/s/1ge8WoPt 密码:zrgi
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!