欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于@EnableGlobalMethodSecurity注解的用法解讀

 更新時間:2023年03月17日 14:23:32   作者:chihaihai  
這篇文章主要介紹了關(guān)于@EnableGlobalMethodSecurity注解的用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

作用

當(dāng)我們想要開啟spring方法級安全時,只需要在任何 @Configuration實例上使用 @EnableGlobalMethodSecurity 注解就能達到此目的。

同時這個注解為我們提供了prePostEnabled 、securedEnabled 和 jsr250Enabled 三種不同的機制來實現(xiàn)同一種功能:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true, securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
}

prePostEnabled 

prePostEnabled = true 會解鎖 @PreAuthorize 和 @PostAuthorize 兩個注解。

從名字就可以看出@PreAuthorize 注解會在方法執(zhí)行前進行驗證,而 @PostAuthorize 注解會在方法執(zhí)行后進行驗證。

public interface UserService {
    List<User> findAllUsers();

    @PostAuthorize ("returnObject.type == authentication.name")
    User findById(int id);
    
	//  @PreAuthorize("hasRole('ADMIN')") 必須擁有 ROLE_ADMIN 角色。
    @PreAuthorize("hasRole('ROLE_ADMIN ')")
    void updateUser(User user);
    
    @PreAuthorize("hasRole('ADMIN') AND hasRole('DBA')")
    void deleteUser(int id);
    
    // @PreAuthorize("principal.username.startsWith('Felordcn')") 用戶名開頭為 Felordcn 的用戶才能訪問。
    // @PreAuthorize("#id.equals(principal.username)") 入?yún)?id 必須同當(dāng)前的用戶名相同。
    // @PreAuthorize("#id < 10") 限制只能查詢 id 小于 10 的用戶

}

常見內(nèi)置表達式

@PostAuthorize:

  • 該注解使用不多,在方法執(zhí)行后再進行權(quán)限驗證。
  • 適合驗證帶有返回值的權(quán)限。Spring EL 提供 返回對象能夠在表達式語言中獲取返回的對象returnObject。
  • 區(qū)別在于先執(zhí)行方法。而后進行表達式判斷。如果方法沒有返回值實際上等于開放權(quán)限控制;如果有返回值實際的結(jié)果是用戶操作成功但是得不到響應(yīng)。
  • 允許方法調(diào)用,但是如果表達式計算結(jié)果為false,將拋出一個安全性異常。

@PreFilter:

  • 集合類型的參數(shù)執(zhí)行過濾,移除結(jié)果為false的元素。
  • 基于方法入?yún)⑾嚓P(guān)的表達式,對入?yún)⑦M行過濾。分頁慎用!該過程發(fā)生在接口接收參數(shù)之前。
  • 入?yún)⒈仨殲?java.util.Collection 且支持 remove(Object) 的參數(shù)。
  • 如果有多個集合需要通過 filterTarget=<參數(shù)名> 來指定過濾的集合。
  • 內(nèi)置保留名稱 filterObject 作為集合元素的操作名來進行評估過濾。
// 指定過濾的參數(shù),過濾偶數(shù)
@PreFilter(filterTarget="ids", value="filterObject%2==0")
public void delete(List<Integer> ids, List<String> username)

@PostFilter:

  • 和@PreFilter 不同的是, 基于返回值相關(guān)的表達式,對返回值進行過濾。
  • 分頁慎用!該過程發(fā)生接口進行數(shù)據(jù)返回之前。

Secured

@Secured注解是用來定義業(yè)務(wù)方法的安全配置。

在需要安全[角色/權(quán)限等]的方法上指定 @Secured,并且只有那些角色/權(quán)限的用戶才可以調(diào)用該方法。

@Secured缺點(限制)就是不支持Spring EL表達式。不夠靈活。并且指定的角色必須以ROLE_開頭,不可省略。

該注解功能要簡單的多,默認(rèn)情況下只能基于角色(默認(rèn)需要帶前綴 ROLE_)集合來進行訪問控制決策。

該注解的機制是只要其聲明的角色集合(value)中包含當(dāng)前用戶持有的任一角色就可以訪問。

也就是 用戶的角色集合和 @Secured 注解的角色集合要存在非空的交集。

不支持使用 SpEL 表達式進行決策。

  
    @Secured({"ROLE_user"})
    void updateUser(User user);

    @Secured({"ROLE_admin", "ROLE_user1"})
    void updateUser();

jsr250E

啟用 JSR-250 安全控制注解,這屬于 JavaEE 的安全規(guī)范(現(xiàn)為 jakarta 項目)。一共有五個安全注解。

如果你在 @EnableGlobalMethodSecurity 設(shè)置 jsr250Enabled 為 true

就開啟了 JavaEE 安全注解中的以下三個:

1.@DenyAll: 拒絕所有訪問

2.@RolesAllowed({“USER”, “ADMIN”}): 該方法只要具有"USER", "ADMIN"任意一種權(quán)限就可以訪問。這里可以省略前綴ROLE_,實際的權(quán)限可能是ROLE_ADMIN

3.@PermitAll: 允許所有訪問

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java遞歸實現(xiàn)迷宮游戲

    Java遞歸實現(xiàn)迷宮游戲

    這篇文章主要介紹了如何利用Java遞歸方法實現(xiàn)迷宮游戲,下面文章會詳細(xì)的從為問題描述開始,清晰的解題思路以及詳細(xì)的代碼實現(xiàn),具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • Java 十大排序算法之插入排序刨析

    Java 十大排序算法之插入排序刨析

    插入排序(InsertionSort),一般也被稱為直接插入排序。對于少量元素的排序,它是一個有效的算法。插入排序是一種最簡單的排序方法,它的基本思想是將一個記錄插入到已經(jīng)排好序的有序表中,從而一個新的、記錄數(shù)增 1 的有序表
    2021-11-11
  • Java實現(xiàn)斗地主案例

    Java實現(xiàn)斗地主案例

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)斗地主案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Java數(shù)據(jù)開發(fā)輔助工具Docker與普通程序使用方法

    Java數(shù)據(jù)開發(fā)輔助工具Docker與普通程序使用方法

    這是為數(shù)據(jù)開發(fā)人員使用的輔助工具,用于數(shù)據(jù)庫之間的表同步,說同步并不嚴(yán)謹(jǐn),因為不是實時更新的,更確切的說法是復(fù)制,可以方便的從一個數(shù)據(jù)庫復(fù)制表到另一個數(shù)據(jù)庫,以下遇到同步的詞請理解為復(fù)制
    2021-09-09
  • Java集合Map的clear與new Map區(qū)別詳解

    Java集合Map的clear與new Map區(qū)別詳解

    這篇文章主要介紹了Java集合Map的clear與new Map區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java中棧和隊列的實現(xiàn)和API的用法(詳解)

    java中棧和隊列的實現(xiàn)和API的用法(詳解)

    下面小編就為大家?guī)硪黄猨ava中棧和隊列的實現(xiàn)和API的用法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot中實現(xiàn)定時任務(wù)的4種方式詳解

    SpringBoot中實現(xiàn)定時任務(wù)的4種方式詳解

    這篇文章主要介紹了SpringBoot中實現(xiàn)定時任務(wù)的4種方式詳解,在Springboot中定時任務(wù)是一項經(jīng)常能用到的功能,實現(xiàn)定時任務(wù)的方式有很多,今天來介紹常用的幾種,需要的朋友可以參考下
    2023-11-11
  • 詳細(xì)解讀Java的Lambda表達式

    詳細(xì)解讀Java的Lambda表達式

    這篇文章主要介紹了詳細(xì)解讀Java的Lambda表達式,lambda?表達式?是Java?8新加入的新特性,它在Java中是引入了函數(shù)式編程這一概念,需要的朋友可以參考下
    2023-04-04
  • 使用Mybatis遇到的坑之Integer類型參數(shù)的解讀

    使用Mybatis遇到的坑之Integer類型參數(shù)的解讀

    這篇文章主要介紹了使用Mybatis遇到的坑之Integer類型參數(shù)的解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 老生常談設(shè)計模式之動態(tài)代理

    老生常談設(shè)計模式之動態(tài)代理

    下面小編就為大家?guī)硪黄仙U勗O(shè)計模式之動態(tài)代理。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論