歷經三個月左右時間,《跟我學Shiro》系列教程已經完結,暫時沒有需要補充的內容,因此生成PDF版供大家下載。最近項目比較緊,沒有時間解答一些疑問,暫時無法回復一些問題,很抱歉,不過可以加群(334194438/348194195)一起討論問題。 點擊下載《跟我學Shiro》教程PDF版。學習交流使用,請勿用於其他任何商業用途。 Shiro目錄 第一章 Shiro簡介 第二章 身份驗證 第三章 授權 第四章 INI配置 第五章 編碼/加密 第六章 Realm及相關對象 第七章 與Web集成
目錄貼: 跟我學Shiro目錄貼 有時候需要顯示當前在線人數、當前在線用戶,有時候可能需要強制某個用戶下線等;此時就需要獲取相應的在線用戶並進行一些操作。 本章基於《第十六章 綜合實例》代碼構建。 會話控制器 @RequiresPermissions("session:*") @Controller @RequestMapping("/sessions") public class SessionController { @Autowired private SessionDAO sessio ...
目錄貼: 跟我學Shiro目錄貼 在做一些企業內部項目時或一些互聯網后台時;可能會涉及到集中權限管理,統一進行多項目的權限管理;另外也需要統一的會話管理,即實現單點身份認證和授權控制。 學習本章之前,請務必先學習《第十章 會話管理》和《第十六章 綜合實例》,本章代碼都是基於這兩章的代碼基礎上完成的。 本章示例是同域名的場景下完成的,如果跨域請參考《第十五章 單點登錄》和《第十七章 OAuth2集成》了解使用CAS或OAuth2實現跨域的身份驗證和授權。另外比如客戶端/服務器端的安全校驗可參考《第二十章 無狀態Web應用集成》。 部署架構 1 ...
目錄貼: 跟我學Shiro目錄貼 在做用戶登錄功能時,很多時候都需要驗證碼支持,驗證碼的目的是為了防止機器人模擬真實用戶登錄而惡意訪問,如暴力破解用戶密碼/惡意評論等。目前也有一 些驗證碼比較簡單,通過一些OCR工具就可以解析出來;另外還有一些驗證碼比較復雜(一般通過如扭曲、加線條/噪點等干擾)防止OCR工具識別;但是在中 國就是人多,機器干不了的可以交給人來完成,所以在中國就有很多打碼平台,人工識別驗證碼;因此即使比較復雜的如填字、算數等類型的驗證碼還是能識別的。 所以驗證碼也不是絕對可靠的,目前比較可靠還是手機驗證碼,但是對於用戶來說相對於驗證碼還是比較麻煩的。 對於驗證 ...
目錄貼: 跟我學Shiro目錄貼 在一些場景中,比如某個領導因為一些原因不能進行登錄網站進行一些操作,他想把他網站上的工作委托給他的秘書,但是他不想把帳號/密碼告訴他秘書,只是想 把工作委托給他;此時和我們可以使用Shiro的RunAs功能,即允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問。 本章代碼基於《第十六章 綜合實例》,請先了解相關數據模型及基本流程后再學習本章。 表及數據SQL 請運行shiro-example-chapter21/sql/ shiro-schema.sql 表結構 請運行shiro-example-chapter21/sq ...
目錄貼: 跟我學Shiro目錄貼 在一些環境中,可能需要把Web應用做成無狀態的,即服務器端無狀態,就是說服務器端不會存儲像會話這種東西,而是每次請求時帶上相應的用戶名進行登錄。 如一些REST風格的API,如果不使用OAuth2協議,就可以使用如REST+HMAC認證進行訪問。HMAC(Hash-based Message Authentication Code):基於散列的消息認證碼,使用一個密鑰和一個消息作為輸入,生成它們的消息摘要。注意該密鑰只有客戶端和服務端知道,其他第三方是不知道的。訪 問時使用該消息摘要進行傳播,服務端然后對該消息摘要進行驗證。如果只傳遞用戶名+密碼的消 ...
目錄貼: 跟我學Shiro目錄貼 用過Spring Security的朋友應該比較熟悉對URL進行全局的權限控制,即訪問URL時進行權限匹配;如果沒有權限直接跳到相應的錯誤頁面。Shiro也支持類似的機制,不過需要稍微改造下來滿足實際需� ...
目錄貼: 跟我學Shiro目錄貼 在某些項目中可能會遇到如每個賬戶同時只能有一個人登錄或幾個人同時登錄,如果同時有多人登錄:要么不讓后者登錄;要么踢出前者登錄(強制退出)。比如 spring security就直接提供了相應的功能;Shiro的話沒有提供默認實現,不過可以很容易的在Shiro中加入這個功能。 示例代碼基於《第十六章 綜合實例》完成,通過Shiro Filter機制擴展KickoutSessionControlFilter完成。 首先來看看如何配置使用(spring-config-shiro.xml) kickoutSessionContro ...
目錄貼: 跟我學Shiro目錄貼 目前很多開放平台如新浪微博開放平台都在使用提供開放API接口供開發者使用,隨之帶來了第三方應用要到開放平台進行授權的問題,OAuth就是干這個 的,OAuth2是OAuth協議的下一個版本,相比OAuth1,OAuth2整個授權流程更簡單安全了,但不兼容OAuth1,具體可以到 OAuth2官網http://oauth.net/2/查看,OAuth2協議規范可以參考http://tools.ietf.org/html /rfc6749。目前有好多參考實現供選擇,可以到其官網查看下載。 本文使用Apache Oltu
目錄貼: 跟我學Shiro目錄貼 簡單的實體關系圖 簡單數據字典 用戶(sys_user) 名稱 類型 長度 描述 id
目錄貼: 跟我學Shiro目錄貼 Shiro 1.2開始提供了Jasig CAS單點登錄的支持,單點登錄主要用於多系統集成,即在多個系統中,用戶只需要到一個中央服務器登錄一次即可訪問這些系統中的任何一個,無須多次登錄。此處我們使用Jasig CAS v4.0.0-RC3版本: https://github.com/Jasig/cas/tree/v4.0.0-RC3 Jasig CAS單點登錄系統分為服務器端和客戶端,服務器端提供單點登錄,多個客戶端(子系統)將跳轉到該服務器進行登錄驗證,大體流程如下: 1、訪問客戶端需要登錄的頁面http://localhost:90 ...
目錄貼: 跟我學Shiro目錄貼 對於SSL的支持,Shiro只是判斷當前url是否需要SSL登錄,如果需要自動重定向到https進行訪問。 首先生成數字證書,生成證書到D:\localhost.keystore 使用JDK的keytool命令,生成證書(包含證書/公鑰/私鑰)到D:\localhost.keystore: keytool -genkey -keystore "D:\localhost.keystore" -alias localhost -keyalg RSA
目錄貼: 跟我學Shiro目錄貼 Shiro提供了記住我(RememberMe)的功能,比如訪問如淘寶等一些網站時,關閉了瀏覽器下次再打開時還是能記住你是誰,下次訪問時無需再登錄即可訪問,基本流程如下: 1、首先在登錄頁面選中RememberMe然后登錄成功;如果是瀏覽器登錄,一般會把RememberMe的Cookie寫到客戶端並保存下來; 2、關閉瀏覽器再重新打開;會發現瀏覽器還是記住你的; 3、訪問一般的網頁服務器端還是知道你是誰,且能正常訪問; 4、但是比如我們訪問淘寶時,如果要查看我的訂單或進行支付時,此時還是需要再進行身份認證的,以確保當前用戶還是你。 ...
目錄貼: 跟我學Shiro目錄貼 Shiro的組件都是JavaBean/POJO式的組件,所以非常容易使用Spring進行組件管理,可以非常方便的從ini配置遷移到Spring進行管理,且支持JavaSE應用及Web應用的集成。 在示例之前,需要導入shiro-spring及spring-context依賴,具體請參考pom.xml。 spring-beans.xml配置文件提供了基礎組件如DataSource、DAO、Service組件的配置。 JavaSE應用 spring-shiro.xml提供了普通JavaSE獨立應用的Spring配置: &l ...
目錄貼: 跟我學Shiro目錄貼 Shiro提供了類似於Spring的Cache抽象,即Shiro本身不實現Cache,但是對Cache進行了又抽象,方便更換不同的底層Cache 實現。對於Cache的一些概念可以參考我的《Spring Cache抽象詳解》:http://jinnianshilongnian.iteye.com/blog/2001040。 Shiro提供的Cache接口: public interface Cache<K, V> { //根據Key獲取緩存中的值 public V get(K key) throws C ...
目錄貼: 跟我學Shiro目錄貼 Shiro提供了完整的企業級會話管理功能,不依賴於底層容器(如web容器tomcat),不管JavaSE還是JavaEE環境都可以使用,提供了會 話管理、會話事件監聽、會話存儲/持久化、容器無關的集群、失效/過期支持、對Web的透明支持、SSO單點登錄的支持等特性。即直接使用Shiro的會 話管理可以直接替換如Web容器的會話管理。 會話 所謂會話,即用戶訪問應用時保持的連接關系,在多次交互中應用能夠識別出當前訪問的用戶是誰,且可以在多次交互中保存一些數據。如訪問一些網站時登錄成功 后,網站可以記住用戶,且在退出之前都可以識別當前用戶是誰。 ...
目錄貼: 跟我學Shiro目錄貼 Shiro提供了JSTL標簽用於在JSP/GSP頁面進行權限控制,如根據登錄用戶顯示相應的頁面按鈕。 導入標簽庫 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 標簽庫定義在shiro-web.jar包下的META-INF/shiro.tld中定義。 guest標簽 <shiro:guest> 歡迎游客訪問,<a href="${pageContext.req ...
目錄貼: 跟我學Shiro目錄貼 8.1 攔截器介紹 Shiro使用了與Servlet一樣的Filter接口進行擴展;所以如果對Filter不熟悉可以參考《Servlet3.1規范》 http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理。首先下圖是Shiro攔 截器� ...
目錄貼: 跟我學Shiro目錄貼 Shiro提供了與Web集成的支持,其通過一個ShiroFilter入口來攔截需要安全控制的URL,然后進行相應的控制,ShiroFilter類 似於如Strut2/SpringMVC這種web框架的前端控制器,其是安全控制的入口點,其負責讀取配置(如ini配置文件),然后判斷URL是否需 要登錄/權限等工作。 7.1 准備環境 1、創建webapp應用 此處我們使用了jetty-maven-plugin和tomcat7-maven-plugin插件;這樣可以直接使用“mvn jetty:run”或“mvn tomcat7:run”直接 ...
目錄貼: 跟我學Shiro目錄貼 6.1 Realm 【2.5 Realm】及【3.5 Authorizer】部分都已經詳細介紹過Realm了,接下來再來看一下一般真實環境下的Realm如何實現。 1、定義實體及關系 即用戶-角色之間是多對多關系,角色-權 ...
目錄貼: 跟我學Shiro目錄貼 在涉及到密碼存儲問題上,應該加密/生成密碼摘要存儲,而不是存儲明文密碼。比如之前的600w csdn賬號泄露對用戶可能造成很大損失,因此應加密/生成不可逆的摘要方式存儲。 5.1 編碼/解碼 Shiro提供了base64和16進制字符串編碼/解碼的API支持,方便一些編碼解碼操作。Shiro內部的一些數據的存儲/表示都使用了base64和16進制字符串。 String str = "hello"; String base64Encoded = Base64.encodeToString(str.getBytes ...
目錄貼: 跟我學Shiro目錄貼 之前章節我們已經接觸過一些INI配置規則了,如果大家使用過如Spring之類的IoC/DI容器的話,Shiro提供的INI配置也是非常類似的,即 可以理解為是一個IoC/DI容器,但是區別在於它從一個根對象securityManager開始。 4.1 根對象SecurityManager 從之前的Shiro架構圖可以看出,Shiro是從根對象SecurityManager進行身份驗證和授權的;也就是所有操作都是自它開始的,這個對象 是線程安全且真個應用只需要一個即可,因此Shiro提供了SecurityUtils讓我們綁定它為全局的,方便后 ...
目錄貼: 跟我學Shiro目錄貼 授權,也叫訪問控制,即在應用中控制誰能訪問哪些資源(如訪問頁面/編輯數據/頁面操作等)。在授權中需了解的幾個關鍵對象:主體(Subject)、資源(Resource)、權限(Permission)、角色( ...
目錄貼: 跟我學Shiro目錄貼 身份驗證,即在應用中誰能證明他就是他本人。一般提供如他們的身份ID一些標識信息來表明他就是他本人,如提供身份證,用戶名/密碼來證明。 在shiro中,用戶需要提供principals (身份)和credentials(證明)給shiro,從而應用能驗證用戶身份: principals:身份,即主體的標識屬性,可以是任何東西,如用戶名、郵箱等,唯一即可。一個主體可以有多個principals,但只有一個Primary principals
目錄貼: 跟我學Shiro目錄貼 1.1 簡介 Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單,對比Spring Security,可能沒有Spring Security做的功能強大,但是在實際工作時可能並不需要那么復雜的東西,所以使用小而簡單的Shiro就足夠了。對於它倆到底哪個好,這個不必糾 結,能更簡單的解決項目問題就好了。 本教程只介紹基本的Shiro使用,不會過多分析源碼等,重在使用。 Shiro可以非常容易的開發出足夠好的應用,其不僅可以用在JavaSE環境,也可以用在JavaEE環境。S ...
歷經三個月左右時間,《跟我學Shiro》系列教程已經完結,暫時沒有需要補充的內容,因此生成PDF版供大家下載。最近項目比較緊,沒有時間解答一些疑問,暫時無法回復一些問題,很抱歉,不過可以加群(334194438/348194195)一起討論問題。 點擊下載《跟我學Shiro》教程PDF版。學習交流使用,請勿用於其他任何商業用途。 Shiro目錄 第一章 Shiro簡介 第二章 身份驗證 第三章 授權 第四章 INI配置 第五章 編碼/加密 第六章 Realm及相關對象 第七章 與Web集成 第八章 攔截器機制 第九章 JSP標簽 第十章 ...