色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

shiro如何實現Web應用認證

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-08 14:53 ? 次閱讀

前面簡單介紹了shiro這個框架的一些基本知識,包括其架構模型,主要的功能,關鍵名稱的含義,以及核心模塊和對應的接口定義。

開始的話

今天我們從一個簡單示例,先了解使用shiro實現Web應用認證時,一名開發者需要做些什么。同樣秉持著技術學習的原則,我們僅僅使用shiro框架以及一些其他簡化開發的工具庫,不會涉及到一些IOC容器,這樣在進行模塊配置以及依賴關系梳理時,通過手動的配置的方式,讓我們更加容易理解...

文章介紹

通過這篇文章,你可以有以下幾個方面的收獲:

  • 基于maven創建一個項目,養成項目依賴統一管理的習慣
  • 了解shiro在項目中的使用過程以及相關的配置
  • 了解如何實現通過shiro完成認證以及授權
  • 了解shiro認證流程
  • 對shiro從理論的認識升華到基礎實踐
  • 獲得一個演示示例

示例實現

創建項目

1) 你可以選擇通過你的IDE快速創建一個項目,比如通過Intellij Idea,通過File->New->Project選擇Maven Archetype創建一個空項目,這里archetype可以選擇quickstart

圖片

這里你很可能遇到一個idea的bug,按上圖提交后,發現idea卡死了,項目創建失敗且無法打開,如果沒有就恭喜你了

2)最終我們會得到一個文件夾,里面包含一個pom.xml文件,結構如下(如果有其他的內容建議刪除,比如src,因為這個pom我們作為項目parent維護)

圖片

添加依賴

細心的你會注意到,在根目錄下有個pom.xml,同時還有個ui-mvc目錄下也有個pom.xml文件,根目錄下的我一般習慣作為整個項目的父級依賴配置文件,用來管理所有依賴、插件版本以及屬性值,ui-mvc下的pom主要通過parent實現屬性繼承,這樣來實現配置集中化管理

./pom.xml

< project >
 //...
   < groupId >com.sucls.security< /groupId >
    < artifactId >auth-shiro< /artifactId >
    < version >1.0-SNAPSHOT< /version >
    < packaging >pom< /packaging >
    
    < properties >
     < project.build.sourceEncoding >UTF-8< /project.build.sourceEncoding >
     < maven.compiler.source >1.8< /maven.compiler.source >
     < maven.compiler.target >1.8< /maven.compiler.target >
     < shiro.version >1.9.1< /shiro.version >
     // ...
  < /properties >
    
 < dependencyManagement >
  < dependencies >
    < !-- 核心 -- >
    < dependency >
      < groupId >org.apache.shiro< /groupId >
      < artifactId >shiro-core< /artifactId >
      < version >${shiro.version}< /version >
    < /dependency >

    < dependency >
      < groupId >org.apache.shiro< /groupId >
      < artifactId >shiro-web< /artifactId >
      < version >${shiro.version}< /version >
    < /dependency >
    // ...
    < /dependencies >
 < /dependencyManagement >
   // ...
< /project >

./ui-mvc/pom.xml

< parent >
  < groupId >com.sucls.security< /groupId >
  < artifactId >auth-shiro< /artifactId >
  < version >1.0-SNAPSHOT< /version >
  < relativePath >../../pom.xml< /relativePath >
< /parent >
< artifactId >auth-shiro-ui-mvc< /artifactId >
< packaging >war< /packaging >
< name >ui-mvc< /name >

< dependencies >
  < !-- 核心 -- >
  < dependency >
    < groupId >org.apache.shiro< /groupId >
    < artifactId >shiro-core< /artifactId >
  < /dependency >
  < dependency >
    < groupId >org.apache.shiro< /groupId >
    < artifactId >shiro-web< /artifactId >
  < /dependency >
< /dependencies >

大部分內容都省略了,可以參考文末源代碼,主要引入了shiro相關的依賴,以及一個提高開發效率的工具包

編寫shiro相關配置

我們所有代碼都會寫到ui-mvc模塊下,看到名稱就知道我們通過mvc的結構,因此前端是通過jsp這個老技術,后面會講到如何通過前后端分離來實現認證功能。

下面主要從以下幾個方面進行配置:
web.xml以前說過,認證基本都是基于Filter實現,同樣shiro有一個核心的過濾器(該過濾器會將我們的配置解析成一個個過濾器鏈)

< filter >
 < filter-name >shiroFilter< /filter-name >
 < filter-class >org.apache.shiro.web.servlet.ShiroFilter< /filter-class >
< /filter >

< filter-mapping >
 < filter-name >shiroFilter< /filter-name >
 < url-pattern >/*< /url-pattern >
< /filter-mapping >

配置監聽,在系統啟動時基于ServletContextListener調用初始化參數完成一些基本的系統初始化工作

< context-param >
 < param-name >shiroEnvironmentClass< /param-name >
 < param-value >org.apache.shiro.web.env.DefaultWebEnvironment< /param-value >
< /context-param >

< listener >
 < listener-class >com.sucls.security.security.SimpleEnvironmentLoaderListener< /listener-class >
< /listener >

這里通過自定義的監聽,SimpleEnvironmentLoaderListener類承載了shiro基本上所有的配置,在這里我們會完整地構建SecurityManager對象以及Filter的配置,如果讀過以前的文章你就會知道,SecurityManager主要的工作包括:

  • 代理實現用戶身份的認證
  • 對API結果進行緩存
  • 實現了用戶多種形式登錄(多Realm)
  • 實現用戶會話管理
  • 實現記住我功能
  • ...

ShiroFilter配置

FormAuthenticationFilter authcFilter = (FormAuthenticationFilter) filterChainResolver.getFilterChainManager().getFilters().get(DefaultFilter.authc.name());
        authcFilter.setLoginUrl("/login.jsp");
        authcFilter.setSuccessUrl("/index.html");

filterChainResolver.getFilterChainManager().addToChain("/webjars/**", DefaultFilter.anon.name());
filterChainResolver.getFilterChainManager().addToChain("/assets/**", DefaultFilter.anon.name());

filterChainResolver.getFilterChainManager().addToChain("/**", DefaultFilter.authc.name());

這里主要通過配置FilterChainResolver對象來完成ShiroFilter對象的構建,后面講到源代碼時會細說。

SecurityManager配置

private void configureWebSecurityManager(DefaultWebSecurityManager securityManager) {
//
        securityManager.setAuthenticator(newAuthenticator());

        securityManager.setRealms(Arrays.asList(initRealm()));
    }

    private Authenticator newAuthenticator() {
        ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
        authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy()); // 至少一個Realm
        authenticator.setRealms(Arrays.asList(initRealm()) );
        return authenticator;
    }

 private Realm initRealm(){
        return RealmBuilder.create()
                .inMemoryRealm()                .user("admin").password("123456").role("ROLE_ADMIN").permissions(Arrays.asList("read","edit","create","delete"))
                .and()
                    .user("user").password("123456").role("ROLE_USER").permission("read")
                .build();
    }

這里僅根據需要配置了Realm以及認證規則Authenticator

引入頁面

前端模板來源bootstrap quick,在此基礎上修改了遠程資源(js、css)為本地引用,以及引入jsp文件頭對應的配置

啟動項目

通過引入tomcat插件來啟動項目:

< plugin >
    < groupId >org.apache.tomcat.maven< /groupId >
    < artifactId >tomcat7-maven-plugin< /artifactId >
    < version >2.2< /version >
    < configuration >
        < port >8080< /port >
        < path >/< /path >
    < /configuration >
< /plugin >

這樣不需要我們單獨弄個tomcat,通過插件即可實現項目熱啟動,方便調試與靜態頁面的修改

圖片

執行認證

1)進入系統 http://localhost:8080/ 由于沒有登錄,跳轉到登錄頁http://localhost:8080/login.jsp

圖片

2)輸入用戶名密碼,按以上的配置admin/123456,登錄成功,進入主頁

圖片

3)用戶鑒權,上面可以看到admin配置了ROLE_ADMIN角色,user配置了ROLE_USER角色,所以

admin登錄時:

訪問 http://localhost:8080/system/getProperties.json 正常返回數據 ;

訪問 http://localhost:8080/subject/getSubject.json 進入未授權頁面

關于shiro鑒權部分主要是基于Filter以及AOP完成,其中請求交易基于Filter,在請求時基于登錄權限信息進行交易攔截,而AOP則可以針對方法的調用階段,更加靈活和通用。具體的實現過程后面會細說,同時可以看到示例簡單的實現過程

示例分析

在整個示例中,回憶我們做了什么,有什么用?

  1. 引入shiro相關的依賴包,這點沒什么說的
  2. 配置web.xml的Filter以及Listener Listener則是基于Servlet的ServletContextListener規則,在web容器啟動后,調用contextInitialized方法完成容器初始化工作。這里的初始化包括:
  • 對SecurityManager的配置,后面我們會看到關于shiro的配置基本都是針對這個對象。包括Realm、多Realm認證策略、RememberMe、SessionManager等等
  • 對FilterChainResolver的配置,目的是為了完善ShiroFilter對象,主要針對請求路徑對應的過濾器,下面每一行都是一個根據請求路徑匹配的過濾器鏈,一段請求匹配,則進入對應過濾器鏈,所有注意配置順序
/assets/** = anon
/login = authc
/admin/** = roles[ROLE_ADMIN]
/admin/add* = perms[add:*]   //[action:type:instance]
/** = authc
  1. 引入靜態頁面,這里基于jsp實現,當然還有其他前端模板引擎可以使用,其中靜態資源通過引入webjars來加載
  2. 由于沒有引入springmvc,在資源映射(請求到頁面或交易)以及依賴管理、AOP裝配等等都是手動通過代碼完成,增加了代碼復雜度,但是結構會更清晰,更容易理解

要知道,我們的目的是為SecurityManager注入屬性以及配置ShiroFilter過濾規則,并不一定需要基于ServletContextListener,這只是一個選擇,比如還可以在Filter的init方法中完成,只要保證系統啟動后對應的配置加載或處理完成即可。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2730

    瀏覽量

    47656
  • 接口
    +關注

    關注

    33

    文章

    8687

    瀏覽量

    151674
  • 容器
    +關注

    關注

    0

    文章

    499

    瀏覽量

    22092
  • Web應用
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3511
收藏 人收藏

    評論

    相關推薦

    uClinux下動態Web技術的實現方法

    分析uClinux 操作系統的特點, 實現uClinux 下的Boa Web Server; 討論如何通過編寫CGI 程序來最終實現uClinux 下的動態Web 頁面技術。
    發表于 04-15 11:10 ?17次下載

    基于網格環境實現WEB應用編程研究

            本文分析了現存web 應用系統存在的主要問題。提出了基于網格環境實現web 應用的框架和模型。并對具體過程進行了闡述。關鍵詞:
    發表于 09-05 09:12 ?5次下載

    uClinux下動態Web技術的實現方法

    摘要:介紹uClinux操作系統的御,實現uClinux下的Boa Web Server;討論如何通過編寫CGI程序來最終實現uClinux下的動態Web頁面技術。
    發表于 03-11 12:43 ?584次閱讀
    uClinux下動態<b class='flag-5'>Web</b>技術的<b class='flag-5'>實現</b>方法

    基于Linux的WEB服務器的設計與實現

    基于Linux的WEB服務器的設計與實現 嵌入式WEB服務器的主要設計思想就是將嵌入式系統和 WEB技術結合起來,將 WEB技術引入到現場
    發表于 10-06 08:30 ?3054次閱讀
    基于Linux的<b class='flag-5'>WEB</b>服務器的設計與<b class='flag-5'>實現</b>

    HTTP認證及其在Web平臺中的實現

    一、前言 HTTP認證Web服務器對客戶端的權限進行認證的一種方式,能夠為Web應用提供一定程度的安全保障。目前一些Web應用項目已經提出
    發表于 05-03 16:27 ?27次下載

    基于Web的智能答疑系統的設計和實現劉江平

    基于Web的智能答疑系統的設計和實現_劉江平
    發表于 03-16 08:00 ?0次下載

    shiro簡單教程,環境搭建,權限控制,登陸驗證

    shiro簡單教程,環境搭建,權限控制,登陸驗證
    發表于 09-09 08:18 ?9次下載
    <b class='flag-5'>shiro</b>簡單教程,環境搭建,權限控制,登陸驗證

    Apache Shiro框架的詳細資料說明

    自 2015 年 9 月 10 日以來,KyCore 項目中的用戶機制已被完整地替換為了以 Apache Shiro 框架為基礎建立的全新用戶機制,原有的用戶機制已基本上被全部刪除。更新以來,同事們
    發表于 03-08 08:00 ?4次下載
    Apache <b class='flag-5'>Shiro</b>框架的詳細資料說明

    如何一鍵實現openWRT的web認證功能

    我們應該了解了Lua語言在OpenWrt Web配置頁面的基本對應功能設計方法。本文將以一個頁面為例, 來說明Lua 語言如何實現頁面控件以及怎么使輸入或操作的選項在系統中生效。
    發表于 12-31 11:12 ?15次下載
    如何一鍵<b class='flag-5'>實現</b>openWRT的<b class='flag-5'>web</b><b class='flag-5'>認證</b>功能

    使用RESTful Web服務的過程

    本指南將引導您完成創建使用#spring# #spring認證# RESTful Web 服務的應用程序的過程。
    的頭像 發表于 09-06 15:47 ?734次閱讀

    shiro綜合利用工具介紹

    shiro綜合利用工具:ShiroExp ? 工具介紹 shiro一把梭工具,該輪子主要有三大功能如下: 1、默認密鑰爆破 利用SimplePrincipalCollection進行檢測 利用
    的頭像 發表于 10-24 11:14 ?5477次閱讀

    再見了shiro

    在分布式項目里,比如電商項目,其實不太需要明確的權限劃分,說白了,我認為沒必要做太麻煩的權限管理,一切從簡。何況shiro對于springCloud等各種分布式框架來說,簡直就是“災難”。
    的頭像 發表于 01-15 11:32 ?734次閱讀

    Shiro功能介紹

    記得做的第一個Web項目,系統認證授權這塊就是基于Shiro實現的,當時也是第一次接觸到這種類型的框架,同時是基于Spring做的集成,并且相關的配置都已經是定制好的,只需要我們根據項
    的頭像 發表于 10-08 15:07 ?524次閱讀
    <b class='flag-5'>Shiro</b>功能介紹

    基于Web的遠程監控系統設計及實現

    電子發燒友網站提供《基于Web的遠程監控系統設計及實現.pdf》資料免費下載
    發表于 10-18 09:53 ?0次下載
    基于<b class='flag-5'>Web</b>的遠程監控系統設計及<b class='flag-5'>實現</b>

    一個簡單的Shiro RCE檢測和利用腳本

    一個簡單的Shiro RCE檢測和利用腳本。
    的頭像 發表于 01-09 09:46 ?697次閱讀
    主站蜘蛛池模板: FREE性丰满白嫩白嫩的HD| 日本xxxx裸体xxxx| 看了n遍舍不得删的黄文| 色吧电影院| 一本之道高清在线观看免费| av视频在线免播放观看| 国内精品久久久久影院亚洲| 欧洲video60| 在线视频 日韩视频二区| 国产日韩精品一区二区在线观看| 男女疯狂一边摸一边做羞羞视频| 性欧美video| 成人免费观看国产高清| 久久九九免费| 午夜影院视费x看| 超碰97 总站 中文字幕| 毛片TV网站无套内射TV网站| 亚洲中文字幕乱码熟女在线| 国产偷啪自怕网| 日韩亚洲欧美中文高清| av天堂电影网在线观看| 久久亚洲这里只有精品18| 亚洲欧美激情精品一区二区| 国产精品免费一区二区三区四区| 全部老头和老太XXXXX| 999久久免费高清热精品| 久久99蜜桃精品麻豆| 亚洲精品无码AV中文字幕蜜桃| 国产精品AV视频一二三区| 色www精品视频在线观看| 成人国产亚洲精品A区天堂蜜臀| 牛牛免费视频| 91麻豆精品一二三区在线| 久久视频这里只精品99re8久| 亚洲免费一区| 精品久久久麻豆国产精品| 亚洲 欧美 国产 综合久久| 国产精品成人免费| 小小水蜜桃视频高清在线观看免费 | 在线看片福利无码网址| 精品亚洲国产熟女福利自在线|