【云圖說】第235期 DDS讀寫兩步走 帶您領(lǐng)略只讀節(jié)點的風(fēng)采
1163
2025-03-31
本節(jié)講集成Web(沒有通過數(shù)據(jù)庫-通過text)
實現(xiàn)登錄經(jīng)過Shiro驗證后跳轉(zhuǎn)另外的頁面,以及沒驗證通過進行的權(quán)限攔截
shiro.ini文件配置
[main] authc.loginUrl=/login ;這里的配置為authc驗證沒通過請求的路徑 loginUrl為一個屬性名 org.apache.shiro.web.filter.authc.FormAuthenticationFilter類中 roles.unauthorizedUrl=unauthorized.jsp ;roles 角色認(rèn)證未通過去請求的Url 在org.apache.shiro.web.filter.authz.AuthorizationFilter可以看到unauthorizedUrl這個屬性 perms.unauthorizedUrl=unauthorized.jsp ;權(quán)限認(rèn)證未通過 [users] chx=123,admin jack=123,teacher marry=123 json=123 [roles] admin=user:* teacher=student:* [urls] /login=anon ;請求login需要的權(quán)限,只要游客就行,或者不進行驗證 anon /admin=authc ;會進行身份驗證 authc 對應(yīng)的是過濾器 ;權(quán)限攔截是有順序的,需要先進行身份驗證,也就是登錄后才有權(quán)限角色等認(rèn)證 /student=roles[teacher] ;請求student url 必須擁有roles的teacher角色登錄 /teacher=perms["user:create"] ;必須要有teacher的user:create操作才能訪問teacher這個url
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ShiroUtils工具類:
package cn.chenhaoxiang.common; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ShiroUtils { private static Logger logger = LoggerFactory.getLogger(ShiroUtils.class); /** * 封裝Subject * @param configFile 配置文件 * @param userName 用戶名 * @param password 密碼 * @return */ public static Subject login(String configFile, String userName, String password){ //IniSecurityManagerFactory方法在1.4.0中被注解標(biāo)志為不建議使用 //讀取配置文件,初始化SecurityManager工廠 Factory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
pom.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
web.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
代碼核心就這些了,其他的代碼可以下載源碼自己運行學(xué)習(xí)。
進行測試的話,直接在瀏覽器中輸入想訪問的鏈接就行,你可以看控制臺輸出的運行結(jié)果,以及頁面的跳轉(zhuǎn)。
官網(wǎng)學(xué)習(xí)文檔鏈接:http://shiro.apache.org/web.html#Web-Shiro1.2andlater
Url匹配方式(urls)
? 匹配一個字符,例如 /admin? 可以匹配/admin1;/admin2等等,但是不能匹配/admin12;/admin,也就是不能匹配多個字符或者多路徑,而且必須匹配一個字符 * 匹配零個或者一個或者多個字符,例如 /admin* 可以匹配 /admin;/admin1;/admin12;等等但是不能匹配/admin/a,也就是不能匹配多路徑,只能在一個路徑下 ** 匹配零個或者多個路徑,例如 /admin/**,可以匹配/admin;/admin/a;/admin/a/b,不能匹配/admin12,因為是匹配多路徑的,而不是多字符
1
2
3
可以自己配合urls下的/admin來測試
可以自己同時結(jié)合幾個匹配方式來測試,例如/admin*/**
注意: /admin**和/admin/**是一樣的
Shiro標(biāo)簽
結(jié)合實例來理解shiro標(biāo)簽
shiro:hasRole
注意jsp先引入:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
1
jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
1
2
3
4
5
6
7
8
9
10
11
12
13
這樣,你登錄之后,如果有admin角色,就會顯示里面的那句話了
登錄admin角色的用戶
shiro:hasPermission標(biāo)簽
1
2
3
如果擁有student:create權(quán)限,就會顯示標(biāo)簽內(nèi)文字
shiro:principal標(biāo)簽
顯示用戶信息的標(biāo)簽
1
Shiro會話機制
Shiro有自己的一套會話機制,不多講,其實正常開發(fā)的話,一般都是用默認(rèn)的
//獲取Session Shiro管理的Session Session session = subject.getSession(); System.out.println("sessionId:"+session.getId());//用戶會話的唯一id System.out.println("sessionHost:"+session.getHost());//獲取主機地址 System.out.println("sessionTimeOut:"+session.getTimeout());//獲取超時時間,默認(rèn)是半小時的,單位ms session.setAttribute("info","session數(shù)據(jù)");
1
2
3
4
5
6
7
要深入研究的話,可以去官網(wǎng)看看哦: http://shiro.apache.org/web.html#Web-sessionManagement
源代碼-:
本文章由[諳憶]編寫, 所有權(quán)利保留。
歡迎轉(zhuǎn)載,分享是進步的源泉。
轉(zhuǎn)載請注明出處:
http://chenhaoxiang.cn
本文源自【諳憶的博客】
web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。