Shiro学习(六)--Shiro标签

一、 Shiro标签

前面我们剖析了Shiro的授权流程,并且编写了授权的小实例。下面我们来探讨一下Shiro的标签。

Shiro提供了JSTL标签用于在JSP页面进行权限控制,如根据登录用户显示相应的页面按钮。

Shiro提供的标签有如下几种:

(1)guest标签:用户没有身份验证时显示相应信息,即游客访问信息。
例如:

    <shiro:guest>
        欢迎游客访问,<a href="login.jsp">登录</a>
    </shiro:guest>

(2)user标签:用户已经经过“认证/记住我”登录后显示相应的信息。

<shiro:user>
    欢迎[<shiro:principal/>]登录,<a href="logout">注销</a>
</shiro:user>

(3)authenticated标签:用户已经身份验证通过,即Subject.login,不是“记住我”登录的。
例如:

<shiro:authenticated>
    用户[<shiro:principal/>]身份验证已经通过
</shiro:authenticated>

(4)notAuthenticated标签:用户未进行身份验证,即没有调用Subject.login进行登录,包括
“记住我”自动登录的也属于未进行身份验证
例如:

<shiro:notAuthenticated>
    未进行身份验证(包括记住我)
</shiro:notAuthenticated>

(5)principal标签:显示用户身份信息。默认调用Subject.getPrincipal()获取,即Primary Principal。
例如:

<shiro:principal property="username"/>

这个principal就是在Realm最后返回的AuthenticationInfo对象中封装的principal对象,在前面
的实例中,我们封装的是用户账号(username)信息:
在这里插入图片描述
开发人员可以根据需要,封装一些用户的其它信息为principal,
例如封装User对象为principal,这样就可以在页面中使用principal标签获取用户的一些常用信息了

(6)hasRole标签:如果当前Subject有角色将显示body体内容。
例如:

<shiro:hasRole name="admin"/>
    用户[<shiro:principal/>]拥有角色admin<br/>
</shiro:hasRole>

(7)hasAnyRoles标签:如果当前Subject有任意一个角色(或的关系)将显示body内容。
例如:

<shiro:hasAnyRoles name="admin,user">
    用户[<shiro:principal/>]拥有角色admin或user<br/>
</shiro:hasAnyRoles>

(8)lacksRole:如果当前Subject没有指定的角色将显示body体内容。
例如:

<shiro:lacksRole name="admin"/>
    用户[<shiro:principal/>]没有角色admin<br/>
</shiro:lacksRole>

(9)hasPermission:如果当前Subject有指定的权限将显示body体内容。
例如:

<shiro:hasPermission name="user:create"/>
    用户[<shiro:principal/>]拥有权限user:create<br/>
</shiro:hasPermission>

(10)lacksPermission:如果当前Subject没有指定的权限将显示body体内容。
例如:

<shiro:lacksPermission name="org:create"/>
    用户[<shiro:principal/>]没有权限org:create<br/>
</shiro:lacksPermission>

下面我们来演示几个标签。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
     登录成功!欢迎<shiro:principal/>访问首页O(∩_∩)O
   <a href="userAuth/logout">登出</a>
   <br/><br/>
   <a href="admin.jsp">Admin Page</a>
   <br/><br/>
   <a href="User.jsp">User Page</a>
  </body>
</html>

在其中的“<%@ page …”下放置shiro标签库:

    <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

然后编写一些标签,显示一些信息:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>首页</title>
      </head>
      <body>
         登录成功!欢迎访问首页O(∩_∩)O
       <a href="userAuth/logout">登出</a>
       
       <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>
      </body>
    </html>
    

在上面的页面中,首先欢迎信息中使用“shiro:principal/"显示用户名信息。
而在下面,使用“hasRole”标签,如果用户有“admin”角色,则显示“Admin Page”的超链接,
如果用户有“user”角色,则显示“User Page”的超链接。

二、springBoot中的thymeleaf中使用Shiro
  • 我们需要引入依赖
    <dependency>
     
        <groupId>com.github.theborakompanioni</groupId>
     
        <artifactId>thymeleaf-extras-shiro</artifactId>
     
        <version>2.0.0</version>
     
    </dependency>

引入完成后,直接启动应用会报错,因为thymeleaf-extras-shiro这个组件需要thymeleaf3.0支持,而Springboot 1.58版本默认的thymeleaf的版本是2.X的,所以我们还要将thymeleaf设置成3.0版本,具体代码如下,还是在pom.xml里:

    <properties>
     
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     
        <java.version>1.8</java.version>
     
        <thymeleaf.version>3.0.0.RELEASE</thymeleaf.version>
     
        <thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
     
    </properties>

此处设置完毕后我们才是真正的将thymeleaf-extras-shiro引入进来了,之后我们还要在Shiro的Config文件中对设置进行相应的修改:

        @Bean(name = "shiroDialect") 
        public ShiroDialect shiroDialect(){
	        return new ShiroDialect();
    	}

添加这段代码的目的就是为了在thymeleaf中使用shiro的自定义tag。
好了,现在基本上所有使用shiro-tag的条件都具备了,现在给出前端的代码示例:

 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="Thymeleaf"
 
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
 
<head>
<meta charset="UTF-8" />
 <title>Insert title here</title>
 </head>
 <body>
 <h3>index</h3>
 <!-- 验证当前用户是否为“访客”,即未认证(包含未记住)的用户。 -->
<p shiro:guest="">Please <a href="login.html">login</a></p> 
<!-- 认证通过或已记住的用户。 -->
<p shiro:user="">
Welcome back John! Not John? Click <a href="login.html">here</a> to login.
</p>
<!-- 已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。 -->
<p shiro:authenticated="">
Hello, <span shiro:principal=""></span>, how are you today?
</p>
<a shiro:authenticated="" href="updateAccount.html">Update your contact information</a>
<!-- 输出当前用户信息,通常为登录帐号信息。 -->
 <p>Hello, <shiro:principal/>, how are you today?</p> 
<!-- 未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户。 --> 
<p shiro:notAuthenticated="">
 Please <a href="login.html">login</a> in order to update your credit card information.
</p>
 <!-- 验证当前用户是否属于该角色。 --> 
<a shiro:hasRole="admin" href="admin.html">Administer the system</a><!-- 拥有该角色 -->
<!-- 与hasRole标签逻辑相反,当用户不属于该角色时验证通过。 -->
<p shiro:lacksRole="developer"><!-- 没有该角色 -->
Sorry, you are not allowed to developer the system.
</p>
<!-- 验证当前用户是否属于以下所有角色。 -->
<p shiro:hasAllRoles="developer, 2"><!-- 角色与判断 -->
You are a developer and a admin.
</p>
<!-- 验证当前用户是否属于以下任意一个角色。 -->
<p shiro:hasAnyRoles="admin, vip, developer,1"><!-- 角色或判断 -->
You are a admin, vip, or developer.
</p> 
<!--验证当前用户是否拥有指定权限。 -->
<a shiro:hasPermission="userInfo:add" href="createUser.html">添加用户</a><!-- 拥有权限 -->
<!-- 与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。 -->
 
<p shiro:lacksPermission="userInfo:del"><!-- 没有权限 -->
Sorry, you are not allowed to delete user accounts.
</p>
<!-- 验证当前用户是否拥有以下所有角色。 -->
 
<p shiro:hasAllPermissions="userInfo:view, userInfo:add"><!-- 权限与判断 -->
 
You can see or add users.
</p>
<!-- 验证当前用户是否拥有以下任意一个权限。 -->
 
<p shiro:hasAnyPermissions="userInfo:view, userInfo:del"><!-- 权限或判断 -->
You can see or delete users.
 
</p>
 
<a shiro:hasPermission="pp" href="createUser.html">Create a new User</a>
</body>
</html>

这里注意一个细节,在html界面的顶部加一个tag标签引入:xmlns:shiro=“http://www.pollix.at/thymeleaf/shiro”

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值