1. 程式人生 > >shiro學習--1、簡單的登入和登出

shiro學習--1、簡單的登入和登出

一、簡介

Apache Shiro 是一個強大易用的 Java 安全框架,提供了認證、授權、加密和會話管理等功能,對於任何一個應用程式,Shiro 都可以提供全面的安全管理服務。並且相對於其他安全框架,Shiro 要簡單的多。

從Shiro 內部來看下 Shiro 的架構,如下圖所示:

Subject:主體,可以看到主體可以是任何可以與應用互動的 “使用者”;

SecurityManager:相當於 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心臟;所有具體的互動都通過 SecurityManager 進行控制;它管理著所有 Subject、且負責進行認證和授權、及會話、快取的管理。

Authenticator:認證器,負責主體認證的,這是一個擴充套件點,如果使用者覺得 Shiro 預設的不好,可以自定義實現;其需要認證策略(Authentication Strategy),即什麼情況下算使用者認證通過了;

Authrizer:授權器,或者訪問控制器,用來決定主體是否有許可權進行相應的操作;即控制著使用者能訪問應用中的哪些功能;

Realm:可以有 1 個或多個 Realm,可以認為是安全實體資料來源,即用於獲取安全實體的;可以是 JDBC 實現,也可以是 LDAP 實現,或者記憶體實現等等;由使用者提供;注意:Shiro 不知道你的使用者 / 許可權儲存在哪及以何種格式儲存;所以我們一般在應用中都需要實現自己的 Realm;

SessionManager:如果寫過 Servlet 就應該知道 Session 的概念,Session 呢需要有人去管理它的生命週期,這個元件就是 SessionManager;而 Shiro 並不僅僅可以用在 Web 環境,也可以用在如普通的 JavaSE 環境、EJB 等環境;所有呢,Shiro 就抽象了一個自己的 Session 來管理主體與應用之間互動的資料;這樣的話,比如我們在 Web 環境用,剛開始是一臺 Web 伺服器;接著又上了臺 EJB 伺服器;這時想把兩臺伺服器的會話資料放到一個地方,這個時候就可以實現自己的分散式會話(如把資料放到 Memcached 伺服器);

SessionDAO

:DAO 大家都用過,資料訪問物件,用於會話的 CRUD,比如我們想把 Session 儲存到資料庫,那麼可以實現自己的 SessionDAO,通過如 JDBC 寫到資料庫;比如想把 Session 放到 Memcached 中,可以實現自己的 Memcached SessionDAO;另外 SessionDAO 中可以使用 Cache 進行快取,以提高效能;

CacheManager:快取控制器,來管理如使用者、角色、許可權等的快取的;因為這些資料基本上很少去改變,放到快取中後可以提高訪問的效能

Cryptography:密碼模組,Shiro 提高了一些常見的加密元件用於如密碼加密 / 解密的。


二、shiro下載

注意:不一定要下最新版的,最好是使用穩定版,根據自己的需要下載版本

第二種:用maven新增依賴來幫你自動下載jar包,這需要一點Maven的知識(eclipse下maven專案的建立
),pom.xml需要配置如下:

<dependencies>
    <!-- junit測試 -->     
    <dependency>
        <groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.9</version>
    </dependency>
    <!-- 日誌(Log)介面 -->     
    <dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.1.3</version>
    </dependency>
    <!-- shiro-core的包 -->
    <dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-core</artifactId>
	<version>1.3.2</version>
    </dependency>
</dependencies>

三、開始書寫簡單的登入和登出

1.配置一個簡單的使用者身份 / 憑據(shiro.ini):

[users]
zhangsan=123
wang=123

2.編寫測試用例,具體程式碼如下:

@Test
public void shiro() {
    // 1.建立SecurityManager工廠物件,從shiro.ini中讀取賬號和密碼
    Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
    // 2.建立SecurityManager例項物件
    SecurityManager security = factory.getInstance();
    // 3.將SecurityManager繫結到當前的執行環境中
    SecurityUtils.setSecurityManager(security);
    // 4.建立主體Subject
    Subject subject = SecurityUtils.getSubject();
    // 5.建立登入的令牌
    UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123");
    try {
	// 6.主體登入
	subject.login(token);
    } catch (Exception e) {
	System.out.println("認證不通過,"+e);
    }
    //判斷是否已經驗證通過
    System.out.println("使用者是否登入:"+subject.isAuthenticated());
    Assert.assertEquals(true, subject.isAuthenticated());
    // 7.主體登出
    subject.logout();
    System.out.println("使用者是否登入:"+subject.isAuthenticated());
}
身份驗證的步驟
  1. 收集使用者身份 / 憑證,即如使用者名稱 / 密碼;

  2. 呼叫 Subject.login 進行登入,如果失敗將得到相應的 AuthenticationException 異常,根據異常提示使用者錯誤資訊;否則登入成功;

  3. 最後呼叫 Subject.logout 進行退出操作。

相關推薦

shiro學習--1簡單登入登出

一、簡介Apache Shiro 是一個強大易用的 Java 安全框架,提供了認證、授權、加密和會話管理等功能,對於任何一個應用程式,Shiro 都可以提供全面的安全管理服務。並且相對於其他安全框架,Shiro 要簡單的多。從Shiro 內部來看下 Shiro 的架構,如下圖

Android基於XMPP Smack Openfire下學習開發IM(一)實現使用者註冊登入修改密碼登出

以前學習過用Scoket 建立聊天,簡單的建立聊天是沒問題的,但如果要實現多人複雜的聊天,後臺伺服器程式碼就比較複雜,對於我這新手來講就比較難了。後來在網上看到用openfire做伺服器,利用強大的Smack API庫來實現IM聊天就簡單多了。  網上也有很多關於這方面的資

openfire Android學習(一)----實現使用者註冊登入修改密碼登出

以前學習過用Scoket 建立聊天,簡單的建立聊天是沒問題的,但如果要實現多人複雜的聊天,後臺伺服器程式碼就比較複雜,對於我這新手來講就比較難了。後來在網上看到用openfire做伺服器,利用強大的Smack API庫來實現IM聊天就簡單多了。  網上也有很多關於這方面

Net Core Identity 身份驗證:註冊登入登出 (簡單示例)

一、前言   一般我們自己的系統都會用自己設定的一套身份驗證授權的程式碼,這次用net core的identity來完成簡單的註冊、登入和登出。 二、資料庫   首先就是建立上下文,我這裡簡單的建了Users和UserClaim表,要是沒有UserClaim等下的登入操作是會報錯的,應該是有身份認證方面的關係

用最簡單的方式在ASP.NET Core應用中實現認證登入登出

在安全領域,認證和授權是兩個重要的主題。認證是安全體系的第一道屏障,是守護整個應用或者服務的第一道大門。當訪問者請求進入的時候,認證體系通過驗證對方的提供憑證確定其真實身份。認證體系只有在證實了訪問者的真實身份的情況下才會允許其進入。ASP.NET Core提供了多種認證方式,它們的實現都基於相同的認證模型。

Shiro 整合SpringMVC 並且實現許可權管理,登入登出

Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單,對比Spring Security,可能沒有Spring Security做的功能強大,但是在實際工作時可能並不需要那麼複雜的東西,所以使用小而簡單

SSH框架學習之Spring ----1Spring入門IOC

一、 spring概述 開源的輕量級框架(不依賴很多其他東西–輕量級) 兩部分核心 aop 面向切面程式設計:擴充套件功能不是修改原始碼來實現 ioc 控制反轉:把物件的建立交給spring,通過配置代替之前的new物件操作。

帶著例項繼續學習(1):元件式登入頁面-點選事件元件通訊

本節課要點 我們利用之前學到的知識點做一個使用者登入框,其中 1.為了介面不至於太噁心,我們引入bootstrap樣式 2.我們故意把登入介面要素比如使用者名稱、密碼和提交按鈕分成3個元件(僅僅是為了學習,增加難度) 一、引入bootstrap 新

Linux學習(CentOS-7)---登入登出Linux系統

Linux是一個多使用者的作業系統,使用者要使用該系統,首先必須登入系統,使用完系統後,必須退出系統。本章主要討論登入和退出系統的方法。 使用者登入系統時,為了使系統能夠識別自己,必須輸入使用者名稱和密碼,經系統驗證無誤後方能進入系統。在系統安裝過程中可以建立

斯坦福《機器學習》Lesson6感想———1函式間隔幾何間隔

    這一課主要是從如何判斷一個機器學習分類演算法裡擬合的引數是最佳引數引出函式間隔和幾何間隔的定義。 1、函式間隔     假設假想函式,,那麼可以知道y=1;反之則y=0 。所以當,我們可以很確定的認為y=1;當,可以很確定地認為y=0。所以在分類演算法中,我們在

Android IM(一)實現使用者註冊登入修改密碼登出

以前學習過用Scoket 建立聊天,簡單的建立聊天是沒問題的,但如果要實現多人複雜的聊天,後臺伺服器程式碼就比較複雜,對於我這新手來講就比較難了。後來在網上看到用openfire做伺服器,利用強大的Smack API庫來實現IM聊天就簡單多了。  網上也有很多關於這方面

java鬼混筆記:shiro 11唯一登入登入退出Bug

完整的專案下載路徑(專案下載網上的hui框架來著,什麼鬼檔案都在裡面,暫清除,所以很多): http://download.csdn.net/download/u013845177/9992748 相關的lib包路徑: http://download.csdn.net/do

MySQL學習(二簡單查詢多行單行函式)

一、簡單查詢1.資料查詢       SELECT colName1,colName2,colName3,.. FROM tName [約束]    SELECT 選擇查詢列表    FROM 提供資料來源(表、檢視或者其他資料來源)    //查詢所有的列,顯示順序和建立

shiro實現登入登出

shiro實現登入與登出 CustomRealm public class CustomRealm extends AuthorizingRealm{ //設定realm的名稱

ASP.NET Core Authentication系列(二)實現認證登入登出

前言 === 在[上一篇文章](https://www.cnblogs.com/liang24/p/13910368.html)介紹ASP\.NET Core Authentication的三個重要概念,分別是Claim, ClaimsIdentity, ClaimsPrincipal,以及claims-b

【ADO.NET】1簡單配置與使用

字符串 文件中 .exe 增加 獲取字符串 pass 數據庫連接 rect manage 1、一些基礎的知識點 ExecuteReader(); //返回查詢到的數據,一次一行,用於 selectExecuteNonQuery(); //返回影響的行數,用於 delete,

1簡單控制

ota time posit 垂直 log 字符 space date cto 一、物體移動 法1: void Update () { //transform:(轉換)Translate:(平移)Input.GetAxis:(獲得軸輸入)

1CSS 語法選擇器

pre size htm -a pan 選擇器 屬性表 內部 冒號 CSS 規則由兩個主要的部分構成:選擇器,以及一條或多條聲明: h1 { color:blue; font-size:12px; } 選擇器通常是您需要改變樣式的 HTML 元素。每條聲明由一個屬性

Linux基礎學習1--檔案的屬性目錄

設備 文字 10個 隱藏目錄 由於 一個 路徑 有關 沒有 用命令 ls -al可以列出當前所有檔案,和檔案的各種情況   第一塊是檔案屬性:一共10個,第一個代表檔案類型 {d:目錄,-:檔案,l:連接檔,b:接口設備,c:串行端口設備},接下來是三個一組,第一組:擁有者

python作業/練習/實戰:1簡單登錄腳本

lan href else 次數 成功 welcom lse 學習 教程 作業要求 寫一個登陸的小程序 username = xiaoming passwd = 123456 1、輸入賬號密碼,輸入正確就登陸成功,   提示:歡迎xxxx登陸,今天的日