jstl标签库

  • Shiro提供了jstl标签用于在jsp页面、gsp页面进行权限控制,如根据登录页面显示相应的菜单。
  • 导入标签库
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
  • guest标签:用户未登录时作为游客处理。

    <shiro:guest>
        欢迎游客访问,<a href="${pageContext.request.contextPath}/login.jsp">登录</a>
    </shiro:guest>
    
  • user标签:用户已登录(身份验证或记住我)。

    <shiro:user>
        欢迎[<shiro:principal/>]登录</a>
    </shiro:user>
    
  • authenticated标签:用户已身份验证,不是记住我登录的。

    <shiro:authenticated>
        用户[<shiro:principal/>]已身份验证通过
    </shiro:authenticated>
    
  • notAuthenticated标签:用户通过非身份验证方式登录。

    <shiro:notAuthenticated>
        未身份验证(包括记住我)
    </shiro:notAuthenticated>
    
  • principal标签:显示用户身份信息,默认调用Subject.getPrincipal()。

//相当于Subject.getPrincipals().oneByType(String.class)
<shiro:principal type="java.lang.String"/>

//((User)Subject.getPrincipals()).getUsername()
<shiro:principal property="username"/>
  • hasRole标签:拥有指定角色将显示body体内容。

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

    <shiro:hasAnyRoles name="admin,user">
        用户[<shiro:principal/>]拥有角色admin或user<br/>
    </shiro:hasAnyRoles>
    
  • lacksRole:没有该角色将显示该内容。

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

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

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

自定义标签库

//导入自定义标签库
<%@taglib prefix="zhang" tagdir="/WEB-INF/tags" %>

//使用定义标签库
<zhang:hasAllRoles name="admin,user">
    用户[<shiro:principal/>]拥有角色admin和user<br/>
</zhang:hasAllRoles>
<zhang:hasAllPermissions name="user:create,user:update">
    用户[<shiro:principal/>]拥有权限user:create和user:update<br/>
</zhang:hasAllPermissions>
<zhang:hasAnyPermissions name="user:create,abc:update">
    用户[<shiro:principal/>]拥有权限user:create或abc:update<br/>
</zhang:hasAnyPermissions>
  • tags包下分别写了三个脚本:hasAllPermissions.tag、hasAllRoles.tag、hasAnyPermissions.tag,但是逻辑看不懂。
  • 脚本地址
  • 参考文章