1. 程式人生 > >shiro許可權認證2(基於註解)

shiro許可權認證2(基於註解)



  • RequiresAuthentication:

    使用該註解標註的類,例項,方法在訪問或呼叫時,當前Subject必須在當前session中已經過認證。

  • RequiresGuest:

    使用該註解標註的類,例項,方法在訪問或呼叫時,當前Subject可以是“gust”身份,不需要經過認證或者在原先的session中存在記錄。

  • RequiresPermissions:

    當前Subject需要擁有某些特定的許可權時,才能執行被該註解標註的方法。如果當前Subject不具有這樣的許可權,則方法不會被執行。

  • RequiresRoles:

    當前Subject必須擁有所有指定的角色時,才能訪問被該註解標註的方法。如果當天Subject不同時擁有所有指定角色,則方法不會執行還會丟擲AuthorizationException異常。

  • RequiresUser

    當前Subject必須是應用的使用者,才能訪問或呼叫被該註解標註的類,例項,方法。

使用方法:

Shiro的認證註解處理是有內定的處理順序的,如果有個多個註解的話,前面的通過了會繼續檢查後面的,若不通過則直接返回,處理順序依次為(與實際宣告順序無關):

RequiresRoles 
RequiresPermissions 
RequiresAuthentication 
RequiresUser 
RequiresGuest

例如:你同時聲明瞭RequiresRoles和RequiresPermissions,那就要求擁有此角色的同時還得擁有相應的許可權。

1) RequiresRoles

  • 可以用在Controller或者方法上。可以多個roles,多個roles時預設邏輯為 AND也就是所有具備所有role才能訪問。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresRoles {
    String[] value();
    Logical logical() default Logical.AND; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 示例
//屬於user角色
@RequiresRoles
("user") //必須同時屬於user和admin角色 @RequiresRoles({"user","admin"}) //屬於user或者admin之一;修改logical為OR 即可 @RequiresRoles(value={"user","admin"},logical=Logical.OR)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2) RequiresPermissions

  • 與 RequiresRoles類似
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresPermissions {
    String[] value();
    Logical logical() default Logical.AND; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 示例
//符合index:hello許可權要求
@RequiresPermissions("index:hello")

//必須同時複核index:hello和index:world許可權要求
@RequiresPermissions({"index:hello","index:world"})

//符合index:hello或index:world許可權要求即可
@RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3) RequiresAuthentication,RequiresUser,RequiresGuest

  • 這三個的使用方法一樣
@RequiresAuthentication
@RequiresUser
@RequiresGusst
  • 1
  • 2
  • 3
注:Shiro依賴於slf4j,commons-beanutils,commons-logging三個jar包。
  • RequiresAuthentication:

    使用該註解標註的類,例項,方法在訪問或呼叫時,當前Subject必須在當前session中已經過認證。

  • RequiresGuest:

    使用該註解標註的類,例項,方法在訪問或呼叫時,當前Subject可以是“gust”身份,不需要經過認證或者在原先的session中存在記錄。

  • RequiresPermissions:

    當前Subject需要擁有某些特定的許可權時,才能執行被該註解標註的方法。如果當前Subject不具有這樣的許可權,則方法不會被執行。

  • RequiresRoles:

    當前Subject必須擁有所有指定的角色時,才能訪問被該註解標註的方法。如果當天Subject不同時擁有所有指定角色,則方法不會執行還會丟擲AuthorizationException異常。

  • RequiresUser

    當前Subject必須是應用的使用者,才能訪問或呼叫被該註解標註的類,例項,方法。

使用方法:

Shiro的認證註解處理是有內定的處理順序的,如果有個多個註解的話,前面的通過了會繼續檢查後面的,若不通過則直接返回,處理順序依次為(與實際宣告順序無關):

RequiresRoles 
RequiresPermissions 
RequiresAuthentication 
RequiresUser 
RequiresGuest

例如:你同時聲明瞭RequiresRoles和RequiresPermissions,那就要求擁有此角色的同時還得擁有相應的許可權。

1) RequiresRoles

  • 可以用在Controller或者方法上。可以多個roles,多個roles時預設邏輯為 AND也就是所有具備所有role才能訪問。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresRoles {
    String[] value();
    Logical logical() default Logical.AND; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 示例
//屬於user角色
@RequiresRoles("user")

//必須同時屬於user和admin角色
@RequiresRoles({"user","admin"})

//屬於user或者admin之一;修改logical為OR 即可
@RequiresRoles(value={"user","admin"},logical=Logical.OR)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2) RequiresPermissions

  • 與 RequiresRoles類似
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresPermissions {
    String[] value();
    Logical logical() default Logical.AND; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 示例
//符合index:hello許可權要求
@RequiresPermissions("index:hello")

//必須同時複核index:hello和index:world許可權要求
@RequiresPermissions({"index:hello","index:world"})

//符合index:hello或index:world許可權要求即可
@RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3) RequiresAuthentication,RequiresUser,RequiresGuest

  • 這三個的使用方法一樣
@RequiresAuthentication
@RequiresUser
@RequiresGusst
  • 1
  • 2
  • 3
注:Shiro依賴於slf4j,commons-beanutils,commons-logging三個jar包。

相關推薦

shiro許可權認證2基於註解

RequiresAuthentication: 使用該註解標註的類,例項,方法在訪問或呼叫時,當前Subject必須在當前session中已經過認證。 RequiresGuest: 使用該註解標註的類,例項,方法在訪問或呼叫時,當前Subject可以是“gust”

Spring boot 學習六 spring 繼承 mybatis 基於註解

oot provide rom 構造 per 來看 color 如何使用 語言 MyBatis提供了多個註解如:@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider,這些都是建立動態語言和讓MyBat

Spring之AOP基於註解

目標類 public class MathCalculator { public int div(int i,int j){ return i/j; } } 切面類 @Aspect public class LogAspects { //抽取公共的切入點表示式

mybatis 詳解------入門例項基於註解

目錄 1、建立MySQL資料庫:mybatisDemo和表:user 2、建立一個Java工程,並匯入相應的jar包,具體目錄如下 3、在 MyBatisTest 工程中新增資料庫配置檔案 mybatis-configuration.xml 4、定義表所對應的實體

Apache Shiro 許可權認證1

Shiro的許可權認證 :   程式設計式授權 :                    

使用shiro實現使用者登入認證和簡單許可權的實現法院專案

實現登入認證 步驟一:匯入依賴包 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-

spring boot +security+oauth認證伺服器和資源伺服器基於註解實現

部分程式碼是搬別人寫好、自己做了調整 一、認證伺服器配置 1.新建maven專案pom.xml <dependencies> <dependency> <groupId>

知識儲備:Spring中Bean的生命週期基於註解

一:前言 在Spring專案中,通常配置Spring都是使用XML的形式進行配置,配置bean是通過<bean></bean>標籤將bean加入IOC容器中,但在Spring註解版中,可以通過Java程式碼進行配置,即建立一個java類在其類頭上標註@Configurat

python3繪圖示例2基於matplotlib:柱狀圖、分布圖、三角圖等

ims 標準 and odi dom2 lam you vars update #!/usr/bin/env python# -*- coding:utf-8 -*-from matplotlib import pyplot as pltimport numpy as np

python3繪圖示例2基於matplotlib:柱狀圖、分佈圖、三角圖等

#!/usr/bin/env python# -*- coding:utf-8 -*-from matplotlib import pyplot as pltimport numpy as npimport pylabimport os,sys,time,math,random# 圖1-給已有的圖加上刻度fi

python3繪圖示例6-2基於matplotlib,繪圖流程介紹及設定等

#!/usr/bin/env python# -*- coding:utf-8 -*-import osimport numpy as npimport matplotlib as mpltfrom matplotlib import pyplot as pltfrom matplotlib.ticker i

隨筆 自定義redis快取註解基於springboot

前言:            最近專案開發中需要使用redis快取為資料庫降壓。由於在構建系統時沒有使用快取,後期加入快取的時候不想對業務程式碼上新增,造成程式碼入侵,所有封裝了一套自定義快取類,處理快取。 開發環境:          win10+Intelli

springMVC第一個demo基於註解方式

因為粗心沒仔細看報錯資訊所以搭建了好久,剛好有時間就記錄下來,希望其他訪問不到Controller類的初學者不要跟我一樣粗心浪費時間 jre版本:1.8 tomca版本:v9.0 spring版本:5.0.1 導包:本人匯入了spring的所有包,沒出現問題,不知道有沒有壞處,高手路過可以指

Android6.0許可權快速申請基於RxJava2更優雅

一、前言 前言?哪來那麼多廢話,直接進入正題! 二、需要申請的許可權 咳咳咳,進入正題前,我們還是先了解一下哪些許可權是Android6.0後需要手動申請的吧,對症下藥,才是王道嘛! group:android.permission-group

Spring入門學習基於註解的方式配置Bean 第十二節

Spring入門學習(基於註解的方式配置Bean) 指定SpringIOC容器掃描包 分別建立`repository,service,controller`層 指定SpringIOC容器掃描包 分別建立reposi

Android6.0動態許可權獲取框架:RxPermission基於RxJava2

首先在build.gradle中新增依賴庫 rxjava和retrofit: compile 'io.reactivex.rxjava2:rxjava:2.x.y' compile 'io.reactivex.rxjava2:rxandroid:2.0.

Shiro認證原理Subject#login的背後故事

登入操作一般都是我們觸發的: Subject subject = SecurityUtils.getSubject(); AuthenticationToken authenticationToken = new ... subject.login(aut

基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構十五許可權架構消費者完整實現

      在第十四章我們已經完成了通用業務類的編寫,因此本章我們將講解如何完整的實現我們的許可權架構的消費者的實現,首先開啟我們的rbac-consumer工程,接著開啟我們的主入口檔案RbacConsumerApplication.java加入@EnableDiscove

基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構十一許可權架構生產者組織架構

      在第十章我們完成了對使用者管理的整合,本章我們將完成對組織架構管理的整合開發工作,首先開啟我們的rbac-produce工程,接著在com/produce/sys/dao目錄底下建立一個UserDao.java介面內容如下:package com.produce.