中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

@EnableGlobalMethodSecurity注解怎么使用

發布時間:2023-03-17 16:52:34 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“@EnableGlobalMethodSecurity注解怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“@EnableGlobalMethodSecurity注解怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

作用

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

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

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

@EnableGlobalMethodSecurity注解怎么使用

prePostEnabled 

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

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

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)") 入參 id 必須同當前的用戶名相同。
    // @PreAuthorize("#id < 10") 限制只能查詢 id 小于 10 的用戶

}

常見內置表達式

@EnableGlobalMethodSecurity注解怎么使用

@PostAuthorize:

  • 該注解使用不多,在方法執行后再進行權限驗證。

  • 適合驗證帶有返回值的權限。Spring EL 提供 返回對象能夠在表達式語言中獲取返回的對象returnObject。

  • 區別在于先執行方法。而后進行表達式判斷。如果方法沒有返回值實際上等于開放權限控制;如果有返回值實際的結果是用戶操作成功但是得不到響應。

  • 允許方法調用,但是如果表達式計算結果為false,將拋出一個安全性異常。

@PreFilter:

  • 集合類型的參數執行過濾,移除結果為false的元素。

  • 基于方法入參相關的表達式,對入參進行過濾。分頁慎用!該過程發生在接口接收參數之前。

  • 入參必須為 java.util.Collection 且支持 remove(Object) 的參數。

  • 如果有多個集合需要通過 filterTarget=<參數名> 來指定過濾的集合。

  • 內置保留名稱 filterObject 作為集合元素的操作名來進行評估過濾。

// 指定過濾的參數,過濾偶數
@PreFilter(filterTarget="ids", value="filterObject%2==0")
public void delete(List<Integer> ids, List<String> username)

@PostFilter:

  • 和@PreFilter 不同的是, 基于返回值相關的表達式,對返回值進行過濾。

  • 分頁慎用!該過程發生接口進行數據返回之前。

Secured

@Secured注解是用來定義業務方法的安全配置。

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

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

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

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

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

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

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

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

jsr250E

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

如果你在 @EnableGlobalMethodSecurity 設置 jsr250Enabled 為 true

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

1.@DenyAll: 拒絕所有訪問

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

3.@PermitAll: 允許所有訪問

讀到這里,這篇“@EnableGlobalMethodSecurity注解怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梓潼县| 正阳县| 九龙城区| 禄劝| 于都县| 兴国县| 金堂县| 邳州市| 卓尼县| 上高县| 贵港市| 温宿县| 九江市| 桃江县| 克拉玛依市| 丁青县| 竹北市| 朝阳区| 盱眙县| 湘潭市| 龙门县| 子长县| 石棉县| 河池市| 蕲春县| 新乡市| 沛县| 张掖市| 泽普县| 布尔津县| 岐山县| 钟山县| 芜湖县| 甘肃省| 孝义市| 民勤县| 五大连池市| 杭锦后旗| 武安市| 元谋县| 合肥市|