1. 程式人生 > >SpringBoot:整合Shiro之Shiro標籤(.jsp和.ftl)

SpringBoot:整合Shiro之Shiro標籤(.jsp和.ftl)

1396375-b8aa328167a528d2.jpg

前言

上一篇部落格,我們說到如何在使用者請求的時候,攔截使用者請求進行操作,這一篇部落格我們來聊一下如何使用Shiro標籤在網頁之中進行使用者角色和許可權控制.那麼,我們就看一下具體的場景,假設頁面當中有一個新增使用者按鈕,我們需要當擁有admin角色的使用者登入認證完成之後顯示,普通使用者不顯示,那麼這時候我們就需要使用Shiro標籤來做處理了.例如這個例子,我們就可以用一下程式碼來實現.如果含有admin就會顯示,反之,則不會顯示.

<shiro:hashRole name = "admin">
    <button >新增使用者</button>
</shiro:hashRole>

JSP的Shiro標籤

在JSP中使用Shiro標籤比較簡單,我們只需要注意用法即可.下面我就把所以Shiro標籤放在下面了,各位看官自行查考.

<shiro:guest>
    遊客訪問 <a href = "login.jsp"></a>
</shiro:guest>
 
user 標籤:使用者已經通過認證\記住我 登入後顯示響應的內容
<shiro:user>
    歡迎[<shiro:principal/>]登入 <a href = "logout">退出</a>
</shiro:user>
 
authenticated標籤:使用者身份驗證通過,即 Subjec.login 登入成功 不是記住我登入的
<shiro:authenticted>
    使用者[<shiro:principal/>] 已身份驗證通過
</shiro:authenticted>
 
notAuthenticated標籤:使用者未進行身份驗證,即沒有呼叫Subject.login進行登入,包括"記住我"也屬於未進行身份驗證
<shiro:notAuthenticated>
    未身份驗證(包括"記住我")
</shiro:notAuthenticated>
 
 
principal 標籤:顯示使用者身份資訊,預設呼叫
Subjec.getPrincipal()獲取,即Primary Principal
<shiro:principal property = "username"/>
 
hasRole標籤:如果當前Subject有角色將顯示body體內的內容
<shiro:hashRole name = "admin">
    使用者[<shiro:principal/>]擁有角色admin
</shiro:hashRole>
 
hasAnyRoles標籤:如果Subject有任意一個角色(或的關係)將顯示body體裡的內容
<shiro:hasAnyRoles name = "admin,user">
    使用者[<shiro:pricipal/>]擁有角色admin 或者 user
</shiro:hasAnyRoles>
 
lacksRole:如果當前 Subjec沒有角色將顯示body體內的內容
<shiro:lacksRole name = "admin">
    使用者[<shiro:pricipal/>]沒有角色admin
</shiro:lacksRole>
 
hashPermission:如果當前Subject有許可權將顯示body體內容
<shiro:hashPermission name = "user:create">
    使用者[<shiro:pricipal/>] 擁有許可權user:create
</shiro:hashPermission>
 
lacksPermission:如果當前Subject沒有許可權將顯示body體內容
<shiro:lacksPermission name = "org:create">
    使用者[<shiro:pricipal/>] 沒有許可權org:create
</shiro:lacksPermission>

Freemark的Shiro標籤

在SpringBoot裡面並不是直接支援JSP檔案的,然後我就在專案中使用了Freemark,但是Shiro標籤並不能直接支援.ftl檔案,所以我們需要先引入一個Maven依賴.


<dependency>
    <groupId>net.mingsoft</groupId>
    <artifactId>shiro-freemarker-tags</artifactId>
    <version>0.1</version>
</dependency>

然後,我們寫一個名為ShiroTagsFreeMarkerCfg配置類來對Freemark使用Shiro標籤進行配置.當然了,要確定配置類能被正確注入到Bean中,程式碼如下所示.

import com.jagregory.shiro.freemarker.ShiroTags;
import freemarker.template.TemplateModelException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import javax.annotation.PostConstruct;

@Component
public class ShiroTagsFreeMarkerCfg {

    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @PostConstruct
    public void setSharedVariable() throws TemplateModelException {
        freeMarkerConfigurer.getConfiguration().setSharedVariable("shiro", new ShiroTags());
    }
}

配置類搞好之後,我們就可以在.ftl檔案中使用Shiro的許可權標籤了,標籤格式如下所示.

<@shiro.guest>  
遊客訪問 <a href = "login.jsp"></a>
</@shiro.guest> 

user 標籤:使用者已經通過認證\記住我 登入後顯示響應的內容
<@shiro.user>  
歡迎[<@shiro.principal/>]登入,<a href="/logout.html">退出</a>  
</@shiro.user>   

 authenticated標籤:使用者身份驗證通過,即 Subjec.login 登入成功 不是記住我登入的
<@shiro.authenticated>  
    使用者[<@shiro.principal/>]已身份驗證通過  
</@shiro.authenticated>   
 
notAuthenticated標籤:使用者未進行身份驗證,即沒有呼叫Subject.login進行登入,包括"記住我"也屬於未進行身份驗證
<@shiro.notAuthenticated>
    當前身份未認證(包括記住我登入的)
</@shiro.notAuthenticated> 
 
 
principal 標籤:顯示使用者身份資訊,預設呼叫
Subjec.getPrincipal()獲取,即Primary Principal
<@shiro.principal property="username"/>

 
hasRole標籤:如果當前Subject有角色將顯示body體內的內容
<@shiro.hasRole name="admin">  
    使用者[<@shiro.principal/>]擁有角色admin<br/>  
</@shiro.hasRole> 
 
hasAnyRoles標籤:如果Subject有任意一個角色(或的關係)將顯示body體裡的內容
<@shiro.hasAnyRoles name="admin,user,member">  
使用者[<@shiro.principal/>]擁有角色admin或user或member<br/>  
</@shiro.hasAnyRoles>   
 
lacksRole:如果當前 Subjec沒有角色將顯示body體內的內容
<@shiro.lacksRole name="admin">  
使用者[<@shiro.principal/>]不擁有admin角色
</@shiro.lacksRole>   
 
hashPermission:如果當前Subject有許可權將顯示body體內容
<@shiro.hasPermission name="user:add">  
    使用者[<@shiro.principal/>]擁有user:add許可權
</@shiro.hasPermission>   

lacksPermission:如果當前Subject沒有許可權將顯示body體內容
<@shiro.lacksPermission name="user:add">  
    使用者[<@shiro.principal/>]不擁有user:add許可權
</@shiro.lacksPermission> 

結語

寫到這裡,前前後後寫了八篇Shiro整合部落格,這個系列的部落格到此就結束了,後期如果遇到新的問題會繼續補充,歡迎繼續關注騷棟.內心騷棟,未忘初心.

參考部落格

1396375-0b2b2cd46a88847c.gif