- 在頁面上,如果要實(shí)現(xiàn)對(duì)某些文本、按鈕等的控制,例如需要有什么角色或者權(quán)限才可以看見這個(gè)按鈕,利用shiro自帶的shiro標(biāo)簽?zāi)芎苋菀拙蛯?shí)現(xiàn)
一 . 引入標(biāo)簽
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro">
二 . shiro 標(biāo)簽
- shiro:authenticated (表示已認(rèn)證通過,但不包括remember me登錄的)
- shiro:guest (表示是游客身份,沒有登錄)
- shiro:hasAnyRoles(表示擁有這些角色中其中一個(gè))
- shiro:hasPermission(表示擁有某一權(quán)限)
- shiro:hashRole (表示擁有某一角色)
- shiro:lacksPermission (表示不擁有某一角色)
- shiro:lacksRole (表示不擁有某一角色)
- shiro:notAuthenticated (表示沒有通過驗(yàn)證)
- shiro:principal (表示用戶的身份)
- shiro:user (表示已登錄)
1.shiro:authenticated (表示已認(rèn)證通過,但不包括remember me登錄的)
<shiro:authenticated>
<label>用戶身份驗(yàn)證已通過 </label>
</shiro:authenticated>
說明:只有已通過用戶認(rèn)證,但不是通過記住我(remember me)瀏覽才會(huì)看到標(biāo)簽內(nèi)的內(nèi)容
2.shiro:guest (表示是游客身份,沒有登錄)
<shiro:guest>
<label>您當(dāng)前是游客,</label><a href="/login.jsp" >請(qǐng)登錄</a>
</shiro:guest>
說明:只有是沒有登錄過,以游客的身份瀏覽才會(huì)看到標(biāo)簽內(nèi)的內(nèi)容
3.shiro:hasAnyRoles(表示擁有這些角色中其中一個(gè))
<shiro:hasAnyRoles name="admin,user">
<label>這是擁有admin或者是user角色的用戶</label>
</shiro:hasAnyRoles>
說明:只有成功登錄后,且具有admin或者user角色的用戶才會(huì)看到標(biāo)簽內(nèi)的內(nèi)容;name屬性中可以填寫多個(gè)角色名稱,以逗號(hào)(,)分隔
4.shiro:hasPermission(表示擁有某一權(quán)限)
<shiro:hasPermission name="admin:add">
<label>這個(gè)用戶擁有admin:add的權(quán)限</label>
</shiro:hasPermission>
說明:只有成功登錄后,且具有admin:add權(quán)限的用戶才可以看到標(biāo)簽內(nèi)的內(nèi)容,name屬性中只能填寫一個(gè)權(quán)限的名稱
5.shiro:hashRole (表示擁有某一角色)
<shiro:hasRole name="admin">
<label>這個(gè)用戶擁有的角色是admin</label>
</shiro:hasRole>
說明:只有成功登錄后,且具有admin角色的用戶才可以看到標(biāo)簽內(nèi)的內(nèi)容,name屬性中只能填寫一個(gè)角色的名稱
6.shiro:lacksPermission (表示不擁有某一權(quán)限)
<shiro:lacksPermission name="admin:delete">
<label>這個(gè)用戶不擁有admin:delete的權(quán)限</label>
</shiro:lacksPermission>
說明:只有成功登錄后,且不具有admin:delete權(quán)限的用戶才可以看到標(biāo)簽內(nèi)的內(nèi)容,name屬性中只能填寫一個(gè)權(quán)限的名稱
7.shiro:lacksRole (表示不擁有某一角色)
<shiro:lacksRole name="admin">
<label>這個(gè)用戶不擁有admin的角色</label>
</shiro:lacksRole>
說明:只有成功登錄后,且不具有admin角色的用戶才可以看到標(biāo)簽內(nèi)的內(nèi)容,name屬性中只能填寫一個(gè)角色的名稱
8.shiro:notAuthenticated (表示沒有通過驗(yàn)證)
<shiro:notAuthenticated>
<label>用戶身份驗(yàn)證沒有通過(包括通過記住我(remember me)登錄的) </label>
</shiro:notAuthenticated>
說明:只有沒有通過驗(yàn)證的才可以看到標(biāo)簽內(nèi)的內(nèi)容,包括通過記住我(remember me)登錄的
9.shiro:principal (表示用戶的身份)
- 取值取的是你登錄的時(shí)候,在Realm 實(shí)現(xiàn)類中的new SimpleAuthenticationInfo(第一個(gè)參數(shù),....) 放的第一個(gè)參數(shù):
....
return new SimpleAuthenticationInfo(user,user.getPswd(), getName());
1)如果第一個(gè)放的是username或者是一個(gè)值 ,那么就可以直接用。
<!--取到username-->
<shiro: principal/>
2)如果第一個(gè)參數(shù)放的是對(duì)象,比如放User 對(duì)象。那么如果要取其中某一個(gè)值,可以通過property屬性來指定。
<!--需要指定property-->
<shiro:principal property="username"/>
10.shiro:user (表示已登錄)
<shiro:user>
<label>歡迎[<shiro:principal/>],</label><a href="/logout.jsp">退出</a>
</shiro:user>
說明:只有已經(jīng)登錄(包含通過記住我(remember me)登錄的)的用戶才可以看到標(biāo)簽內(nèi)的內(nèi)容;一般和標(biāo)簽shiro:principal一起用,來做顯示用戶的名稱
注意:
shiro的jsp標(biāo)簽可以嵌套使用,可以根據(jù)業(yè)務(wù)的具體場(chǎng)景進(jìn)行使用。例如一個(gè)按鈕需要排除不是admin或user角色的用戶才可以顯示,可以像如下這樣實(shí)現(xiàn):
<shiro:lacksRole name="admin">
<shiro:lacksRole name="user">
<label>這個(gè)用戶不擁有admin或user的角色</label>
</shiro:lacksRole>
</shiro:lacksRole>