轉載: http://jinnianshilongnian.iteye.com/blog/2018398, 感謝原做者
博客分類:
歷經三個月左右時間,《跟我學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單點登陸系統分爲服務器端和客戶端,服務器端提供單點登陸,多個客戶端(子系統)將跳轉到該服務器進行登陸驗證,大致流程以下: 一、訪問客戶端須要登陸的頁面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)的功能,好比訪問如淘寶等一些網站時,關閉了瀏覽器下次再打開時仍是能記住你是誰,下次訪問時無需再登陸便可訪問,基本流程以下: 一、首先在登陸頁面選中RememberMe而後登陸成功;若是是瀏覽器登陸,通常會把RememberMe的Cookie寫到客戶端並保存下來; 二、關閉瀏覽器再從新打開;會發現瀏覽器仍是記住你的; 三、訪問通常的網頁服務器端仍是知道你是誰,且能正常訪問; 四、可是好比咱們訪問淘寶時,若是要查看個人訂單或進行支付時,此時仍是須要再進行身份認證的,以確保當前用戶仍是你。 ...
目錄貼: 跟我學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 準備環境 一、建立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如何實現。 一、定義實體及關係 即用戶-角色之間是多對多關係,角色-權 ...
目錄貼: 跟我學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標籤 第十章 ...