最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

作用

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

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

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

prePostEnabled 

prePostEnabled = true 會(huì)解鎖 @PreAuthorize 和 @PostAuthorize 兩個(gè)注解。

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

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)置表達(dá)式

@PostAuthorize:

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

@PreFilter:

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

@PostFilter:

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

Secured

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

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

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

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

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

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

不支持使用 SpEL 表達(dá)式進(jìn)行決策。

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

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

jsr250E

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

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

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

1.@DenyAll: 拒絕所有訪問

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

3.@PermitAll: 允許所有訪問

總結(jié)

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

相關(guān)文章

  • druid配置數(shù)據(jù)庫連接使用密文密碼方式

    druid配置數(shù)據(jù)庫連接使用密文密碼方式

    這篇文章主要介紹了druid配置數(shù)據(jù)庫連接使用密文密碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,
    2023-12-12
  • 解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問題

    解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問題

    Minio是Apache?License?v2.0下發(fā)布的對(duì)象存儲(chǔ)服務(wù)器,使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負(fù)載的高性能基礎(chǔ)架構(gòu)。這篇文章主要介紹了SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù),需要的朋友可以參考下
    2022-03-03
  • java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見方式舉例

    java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見方式舉例

    Map在日常開發(fā)應(yīng)用中的頻率很高,最常用的實(shí)現(xiàn)類是HashMap和有序的TreeMap,下面這篇文章主要給大家介紹了關(guān)于java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見方式舉例,需要的朋友可以參考下
    2024-01-01
  • 聊聊Spring循環(huán)依賴三級(jí)緩存是否可以減少為二級(jí)緩存的情況

    聊聊Spring循環(huán)依賴三級(jí)緩存是否可以減少為二級(jí)緩存的情況

    這篇文章主要介紹了聊聊Spring循環(huán)依賴三級(jí)緩存是否可以減少為二級(jí)緩存的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringAMQP的使用方式案例詳解

    SpringAMQP的使用方式案例詳解

    這篇文章主要介紹了SpringAMQP的使用方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java 互相關(guān)聯(lián)的實(shí)體無限遞歸問題的解決

    Java 互相關(guān)聯(lián)的實(shí)體無限遞歸問題的解決

    這篇文章主要介紹了Java 互相關(guān)聯(lián)的實(shí)體無限遞歸問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java線程池7個(gè)參數(shù)的含義

    Java線程池7個(gè)參數(shù)的含義

    這篇文章主要介紹了Java線程池7個(gè)參數(shù)的含義,所謂的線程池的?7?大參數(shù)是指,在使用?ThreadPoolExecutor?創(chuàng)建線程池時(shí)所設(shè)置的?7?個(gè)參數(shù),下文更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Java基于正則表達(dá)式實(shí)現(xiàn)查找匹配的文本功能【經(jīng)典實(shí)例】

    Java基于正則表達(dá)式實(shí)現(xiàn)查找匹配的文本功能【經(jīng)典實(shí)例】

    這篇文章主要介紹了Java基于正則表達(dá)式實(shí)現(xiàn)查找匹配的文本功能,結(jié)合具體實(shí)例形式分析了java正則查找、字符串遍歷、group分組相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • SpringBoot+Dubbo+Zookeeper知識(shí)整合過程詳解

    SpringBoot+Dubbo+Zookeeper知識(shí)整合過程詳解

    本文首先介紹了分布式系統(tǒng)的基本概念和分類,包括單一應(yīng)用架構(gòu)、垂直應(yīng)用架構(gòu)、分布式服務(wù)架構(gòu)和流動(dòng)計(jì)算架構(gòu),通過一個(gè)完整的Spring Boot + Dubbo + Zookeeper框架搭建示例,展示了如何將這些技術(shù)整合到一個(gè)實(shí)際的項(xiàng)目中,感興趣的朋友一起看看吧
    2025-02-02
  • Spring Security 將用戶數(shù)據(jù)存入數(shù)據(jù)庫

    Spring Security 將用戶數(shù)據(jù)存入數(shù)據(jù)庫

    這篇文章主要介紹了Spring Security 如何將用戶數(shù)據(jù)存入數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí)Spring Security,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論

涡阳县| 天镇县| 阜南县| 古浪县| 织金县| 普陀区| 厦门市| 鄂伦春自治旗| 霍林郭勒市| 岑巩县| 霍州市| 镇宁| 巴青县| 黑水县| 松滋市| 永吉县| 哈密市| 荆门市| 浦东新区| 呼和浩特市| 绥中县| 精河县| 临高县| 石家庄市| 永仁县| 扎鲁特旗| 静宁县| 新沂市| 小金县| 襄汾县| 永修县| 成都市| 吴忠市| 洪洞县| 淄博市| 高陵县| 锡林郭勒盟| 日喀则市| 文水县| 南安市| 吴川市|