1. 程式人生 > >shiro 學習筆記

shiro 學習筆記

許可權系統:
分配許可權(把對某些安全實體的某些許可權分配給某些人員的過程)
驗證許可權(判斷某個人員或程式對某個安全實體是否擁有某個或某些許可權的過程)
安全實體:比如資料,資源。
許可權:比如檢視,修改

許可權的繼承性:安全實體的包含性,比如大樓裡面的房間。
許可權最近匹配原則:和包含類似,裡面沒有許可權控制,像外層找,找到最近的。
shiro 的作用:認證,授權,加密,會話。
這裡寫圖片描述

這裡寫圖片描述
subject:與軟體互動的主體,可以是人,也可以是其他東西。
SecurityManager:shrio框架的心臟,使用者操作subject,但是subject會與SecurityManager進行繫結。
Realms:本質是一個DAO.,shiro 通過Realms 獲取相關的安全資料

Shiro 配置,就是SecurityManager的配置。
ini配置方式:
【main】配置應用程式的SecurityManager 例項以及任何他依賴的元件。其實就是getter/setter方法的呼叫,有自己預設的,我們可以定義自己的。
【users】username=password, rolename1,rolename2,(會根據users自動初始化Realms)
【roles】rolename=permissionDefinition1 .任意的字串。應當使用wildcardPermission,printer:print.(printer,被操作的領域,後者執行的動作)
【urls】
配置都是順序執行的。

身份認證

Principals(身份)
Credentials(憑證)
認證過程:
這裡寫圖片描述

1.應用程式使用Subject.login方法,傳遞建立好的AuthenticationToken例項。
2.DelegatingSubject 委託應用程式的SecurityManager,開始真正的驗證。
3。SubjectManager 接受token,委託給Authenticator例項(ModularRealmAuthenticator)通過呼叫authenticator.authenticate(token)
4.ModularRealmAuthenticator可以配置AuthenticaionStrategy.啟動Multi-Realm

Shiro的授權

許可權:
角色:
使用者:
許可權API
hasRole(rolename).trueJ結果。
hasRoles(List<> rolenames) [true,false] ,返回陣列
hasAllRoles(collection<> rolenames)
checkRole() checkRoles(),checkRoles()

isPermitted(Permission p)
isPermitted(List perms)
isPermittedAll(Collection perms)
checkPermission(Permission p)
checkPermission(String perm)
checkPermissions(Collection perms)
checkPermissions(String… perms)

基於註解的授權。
@RequiresAuthentication : 要求當前Subject已經在當前的session 中被驗證通過,才能訪問,或呼叫。
@RequiresGuest: 在Session中沒有被驗證或者記住。
@RequiresPermissions(“accont:create”):需要相應的許可權。
@RequiresRoles(“admin”):需要是指定角色
@RequiresUser()

這裡寫圖片描述

1.應用程式呼叫Subject的hasRole*,checkRole,isPermitted*等方法,傳遞需要的許可權或者角色。
2..DelegatingSubject 委託應用程式的SecurityManager,執行同樣的方法。
3.SecurityManager實現Authorizer介面,ModularRealmAuthorizer例項。它支援協調任何授權操作過程中的一個或多個Realm例項。
4.檢查配置的Realm是否實現了相同的Authorizer介面。如果是,呼叫Realm的hasRole*等相同方法。

PermissionResolver. (可以全域性設定)將字串轉化為Permission例項。

Realms .
shiro的認證過程,最終會交給Realm執行。呼叫Realm的getAuthenticationInfo(token)
1.檢查提交的進行認證的令牌資訊。
2.根據令牌資訊從資料原獲取使用者資訊
3.對使用者資訊進行匹配驗證
4.驗證通過將返回一個封裝了使用者資訊的AuthenticationInfo例項。
5.失敗,就丟擲AuthenticationException異常資訊。

shiro 預設的Realms 認證實現。
SimpleCredentialsMatcher.
jdbcRealm
自定義Realm.一般繼承AuthorizingRealm 實現常用的authentication,authorization.

Shiro的session管理

Subject currentUser = SecurityUtils.getSubject();
Session session = currentUser.getSession();
session.setAttribute(“someKey”, someValue);

Session還有監聽。
Session資料可以持久化到資料庫。
自定義SessionDao 通常繼承AbstractSessionDao.

shiro和springboot的結合

相關推薦

Apache Shiro學習筆記總結

授權 維護 代碼 自定義 密碼 源碼 器) 對象 訪問控制 1.1 簡介 Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單,對比Spring Security,可能沒有Spring Security做的功能強

shiro學習筆記

成功 通過 是什麽 etsec png authent exc span edi 一、概念: shiro是apache旗下一個開源框架,它將軟件系統的安全認證相關的功能抽取出來,實現用戶身份認證、權限授權、加密、會話管理等功能,組成了一個通用的安全認證框架。 (一)shir

shiro學習筆記(7)--cacheManager、sessionManager、rememberMe配置

1、授權:在自定義realm的doGetAuthorizationInfo方法中讀取使用者許可權並授權 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pri

shiro學習筆記(6)--spring整合及可能遇到的問題小結

上篇spring整合shiro後續… spring整合shiro主要是org.apache.shiro.web.filter.authc.FormAuthenticationFilter類。 1、controller @Controller public class HelloSsm {

shiro學習筆記(5)--spring整合

spring整合shiro(1) 1、jar <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</art

shiro學習筆記(4)--加密

一:加密 1、ini配置 說明: (1)CredentialsMatcher在AuthenticatingRealm中注入 (2)配置HashedCredentialsMatcher加密是因為此類中引數配置方便 #自定義realm 資料加密 [main] credentialsMatc

shiro學習筆記(3)--自定義realm、授權

一:自定義Realm 1、繼承AuthorizingRealm(因為該類中有認證、授權的抽象方法,實現簡單) public class MyRealm1 extends AuthorizingRealm{ @Override public String getName(

shiro學習筆記(2)--認證策略

一:shiro認證策略 1、三種認證策略的實現,可根據需要選擇 2、認證策略配置在ModularRealmAuthenticator中;我畫了一個簡單的流程圖,粗淺理解一下 說明: (1)subject通過實現類DelegatingSubject呼叫login()方法; (2)委託Sec

shiro學習筆記(1)--基礎定義

一:shiro基礎 (學習地址:https://www.w3cschool.cn/shiro/andc1if0.html) 1、核心概念 Authentication:認證 Authorization:授權 SessionManageMent:session管理 Cryptography:

Shiro學習筆記(四)--- CustomRealm

一、簡介 CustomRealm(自定義Realm)是通過仿造JdbcRealm,繼承AuthrizingRealm, 重寫doGetAuthenticationInfo(AuthenticationToken token)【認證】和 doGetAuthorizationInfo(Pri

Shiro學習筆記(三)--- JdbcRealm

一、簡介 JDBCRealm是對接資料庫資料作使用者,角色,許可權查詢的Realm 若使用者不提供查詢語句,則預設從users、user_roles、roles_permissions這三張表中查詢。 下面是它的部分原始碼 public class JdbcRealm exten

Shiro學習筆記(二)--- IniRealm

一、簡介     不同於上一章的simpleRealm,這一章用的是iniRealm。區別在於iniRealm是讀取於配置檔案xxx.ini 來獲取使用者資訊,角色資訊和許可權資訊。 二、配置檔案 idea中,可以把配置檔案放在resource下 ini檔案遇

Shiro學習筆記(一)--- 認證與授權

一、簡介 Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。 主要功能 三個核心元件:Subject, Security

Shiro學習筆記——許可權註解

使用位置 可以放在Controller層的方法上,也可以放在Service層的方法上。 註解概述 @RequiresAuthenication:表示當前Subject已經通過login進行了身份

Shiro學習筆記——資料庫讀取許可權資訊(不使用硬編碼的方式)

在ShiroFilterFactoryBean初始化的過程中,會執行一個setFilterChainDefinitionMap方法,傳入了一個Map,該Map就是URL與許可權的對應關係。 編寫一個例

Shiro學習筆記——remember me

認證和記住我的區別 subject.isAuthenticated(),表示使用者進行了身份驗證登入的,即使用subject.login進行了登入。 subject.isRemebered(),表示使

Shiro學習筆記(1)——shiro入門

                     1.建立一個簡單shiro專案建立一個java工程加入shiro需要的jar包 在src下建立log4j配置檔案(非必需步驟,可以跳過)## Licensed to the Apache Software Foundation (ASF) under one# or

Shiro學習筆記(三)---Spring+SpringMVC示例程式

通過前面的筆記,我們知道了一些基礎知識,這裡自己動手寫一個SS(Spring+SpringMVC)整合Shiro框架,因為本示例還沒有涉及到持久化操作,所以Mybatis或者Hibernate沒有整合,在後面的專案實戰中會給出示例。 1.建立一個maven工程

Shiro學習筆記(3)——授權(Authorization)

1.什麼是授權 授權,就是訪問控制,控制某個使用者在應用程式中是否有許可權做某件事 2.授權三要素 角色 通常代表一組行為或職責.這些行為演化為你在一個軟體應用中能或者不能做的事情。角色通常是分配給使用者帳戶的,因此,通過分配,使

shiro 學習筆記

許可權系統: 分配許可權(把對某些安全實體的某些許可權分配給某些人員的過程) 驗證許可權(判斷某個人員或程式對某個安全實體是否擁有某個或某些許可權的過程) 安全實體:比如資料,資源。 許可權:比如檢視,修改 許可權的繼承性:安全實體的包含性,比如大樓裡