【Shiro】Shiro從小白到大神(四)-集成Web

      網(wǎ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 factory = new IniSecurityManagerFactory(configFile); //獲取securityManager 實例 SecurityManager securityManager=factory.getInstance(); //把securityManager實例綁定到SecurityUtils SecurityUtils.setSecurityManager(securityManager); //得到當(dāng)前執(zhí)行的用戶 Subject subject = SecurityUtils.getSubject();//認(rèn)證實體,當(dāng)前進來的用戶 //創(chuàng)建token令牌,用戶名/密碼 UsernamePasswordToken token = new UsernamePasswordToken(userName,password); //身份認(rèn)證 try { subject.login(token); logger.info("登錄成功!"); } catch (AuthenticationException e) { logger.info("登錄失敗!"); e.printStackTrace(); } return subject; } }

      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配置

      4.0.0 cn.chenhaoxiang ShiroWeb 1.0-SNAPSHOT org.apache.shiro shiro-core 1.3.2 org.apache.shiro shiro-web 1.2.5 org.slf4j slf4j-log4j12 1.7.25 log4j log4j 1.2.17 commons-logging commons-logging 1.2 junit junit 4.12 javax.servlet javax.servlet-api 3.1.0 javax.servlet jstl 1.2

      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配置

      ShiroWeb index.jsp org.apache.shiro.web.env.EnvironmentLoaderListener ShiroFilter org.apache.shiro.web.servlet.ShiroFilter configPath /WEB-INF/shiro.ini ShiroFilter /* loginServlet cn.chenhaoxiang.servlet.LoginServlet adminServlet cn.chenhaoxiang.servlet.AdminServlet loginServlet /login adminServlet /admin

      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

      【Shiro】Shiro從小白到大神(四)-集成Web

      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" %> Title 登錄成功,歡迎你 歡迎有admin角色的用戶

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      這樣,你登錄之后,如果有admin角色,就會顯示里面的那句話了

      登錄admin角色的用戶

      shiro:hasPermission標(biāo)簽

      歡迎有student:create權(quán)限的用戶

      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)容。

      上一篇:如何在wps表中設(shè)置高級過濾器(wps表格高級篩選功能怎么使用)
      下一篇:為什么我的資料關(guān)機重啟之后,全沒了?(電腦重啟資料都沒有了怎么辦)
      相關(guān)文章
      亚洲国产熟亚洲女视频| 亚洲精品一区二区三区四区乱码| 亚洲成年人免费网站| 亚洲∧v久久久无码精品| 亚洲女同成av人片在线观看| 久久久久亚洲精品男人的天堂 | 亚洲美国产亚洲AV| 亚洲永久在线观看| 亚洲中文无码永久免费| 国产精品亚洲综合五月天| 亚洲日本人成中文字幕| 亚洲av产在线精品亚洲第一站| 亚洲日产2021三区在线| 亚洲最新黄色网址| 亚洲精品自拍视频| 亚洲图片中文字幕| 亚洲a视频在线观看| 亚洲首页国产精品丝袜| 亚洲私人无码综合久久网| 亚洲伊人久久大香线蕉AV| 亚洲AV成人一区二区三区在线看| 亚洲一区二区三区丝袜| 亚洲欧美日韩综合久久久| 精品久久久久久久久亚洲偷窥女厕| 久久久久久久久无码精品亚洲日韩| 亚洲6080yy久久无码产自国产| 亚洲国产成人精品无码久久久久久综合 | 亚洲精品久久久www| 国产精品亚洲w码日韩中文| 亚洲日韩国产一区二区三区| 自拍偷自拍亚洲精品第1页| 日本亚洲视频在线| 亚洲天天做日日做天天看| 亚洲第一成年人网站| 亚洲一区精彩视频| 怡红院亚洲红怡院在线观看| 亚洲精品久久久www| 久久亚洲国产欧洲精品一| 亚洲男人天堂av| 亚洲制服丝袜精品久久| 亚洲国产精品日韩av不卡在线|