第九节 Shiro标签原理分析

一、shiro的标签

        首先,你需要知道的是,标签的实质其实是Java代码。你已经知道,JSP实质也是Java代码,更别说用在JSP中的标签了。 稍后你会在源码追踪环节了解到:Shiro标签执行了哪些Java代码。

        标签的作用就是移除JSP页面中的Java代码。

        OK,下面进入正题:Shiro标签。

        最常见的Shiro标签有三个

shiro: principal 标签。获取当前用户认证主凭证信息。支持主凭证是一个对象,可用property的方式取出。

shiro: hasRole  标签。判断当前登录用户是否拥有某种角色。

shiro: hasPermission  判断当前用户是否拥有某种权限。

二、使用实例

          本章节项目源码:点击我下载源码

          我们继续使用上一小节的WEB环境。你可以返回上一小节,复制我的代码,制作一个基本的Shiro与WEB集成环境。

          接着,我们在main.jsp页面里面使用shiro标签。

          首先展示的是shiro.ini配置文件。用户jay =123456 拥有coder角色,并且拥有code:insert与code:update权限。

[main]
#若没有登录,则被authc拦截器重定向到login.jsp页面
logout.redirectUrl=/login.jsp
#用户退出后跳转指定JSP页面
authc.loginUrl = /login.jsp
[users]
jay = 123456,coder
[roles]
coder = code:insert,code:update
[urls]
#发送main请求需要经过认证拦截器authc
#如果用户没有登录,则重定向到login.jsp页面
/main.jsp = authc
#退出拦截器,注销当前用户
/logout = logout

          接下来编写main.jsp页面。进入main.jsp页面的条件就是用户jay已经登录。main.jsp页面的代码如下。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


这里是main.jsp,欢迎来到shiro的世界

欢迎用户登录

能看到我代表你有程序员coder角色


        首先在浏览器上输入http://localhost:8080/main.jsp 。因为没有登录,所以请求会被重定向为http://localhost:8080/login.jsp。

        接着,点击第一个超链接"发送登录认证请求",登陆成功。

        登录成功后,再次请求受限制页面http://localhost:8080/main.jsp。成功来到main.jsp页面。

        我在登录后,并请求main.jsp页面 ,页面上的效果如图所示。(页面丑,求轻喷,大宇的前端水平是helloworld级别的)

 

第九节 Shiro标签原理分析_第1张图片

        OK,页面的话弄的是惨不忍睹,对比main.jsp页面的源码,最基本的Shiro标签功能算是展示出来了。

        JSP中的"欢迎用户登录"的代码,已经被shiro标签成功解析。在页面上将解析为了shiro.ini配置文件中的jay。

        用户jay是coder角色,并且拥有 code:insert权限与code:update权限,所以可以看到"提交代码按钮"与"更新代码按钮"。

        因为jay没有code:delete权限,所以"删除代码按钮"没有在页面上显示出来。

        好了,让我们不要在纠结页面太丑这个问题了。接下来,让我们进入源码,看看Shiro标签到底做了什么事情。

三、源码追踪

源码追踪。

         首先,我们在main.jsp页面上找到标签,按住CRTL点开它的源码配置。

第九节 Shiro标签原理分析_第2张图片

        哦,原来处理此标签的类是一个叫org.apache.shiro.web.tags.PrincipalTag的类。我们继续追踪到此类,在onDoStartTag这个方法处打个断点。

第九节 Shiro标签原理分析_第3张图片

        刷新我们的main.jsp页面,让其重新执行一次解析标签的逻辑。因此,代码就执行到了我们的断点处。研究一下代码,一下就明白了。原来就是获取门面对象Subject对象,拿到Subject对象里面的主凭证。如果主凭证可能是一个对象,比如user对象,将其  地址address 属性作为主凭证,那么可以这样配置:

第九节 Shiro标签原理分析_第4张图片

        最后,将数据刷新到JSP页面中。是不是很简单,原来源码也不是想象中的那么恐怖,不是吗。

第九节 Shiro标签原理分析_第5张图片

源码追踪。

第九节 Shiro标签原理分析_第6张图片

        获取到当前Shiro环境的Subject对象,再判断当前登录用户是否有此角色。

        返回1则页面显示,返回0则页面不显示。

源码追踪。

四、如何开发自定义标签

        自定义标签其实不难,开发出自己的标签也是一个非常有趣的过程。如果你有业务需要,或者想进一步学习如何开发标签,欢迎参考:“孤傲苍狼”大牛的jsp自定义标签开发入门。

五、源码下载

        本章节项目源码:点击我下载源码

----------------------------------------------------分割线------------------------------------------------------- 

        下一篇:第十节 SSM框架集成Shiro

        阅读更多:跟着大宇学Shiro目录贴

你可能感兴趣的:(跟着大宇学Shiro)