日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

java安全权限配置_使用Spring安全表达式控制系统功能访问权限问题

發(fā)布時(shí)間:2023/12/10 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java安全权限配置_使用Spring安全表达式控制系统功能访问权限问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、SPEL表達(dá)式權(quán)限控制

從spring security 3.0開始已經(jīng)可以使用spring Expression表達(dá)式來控制授權(quán),允許在表達(dá)式中使用復(fù)雜的布爾邏輯來控制訪問的權(quán)限。Spring Security可用表達(dá)式對(duì)象的基類是SecurityExpressionRoot。

表達(dá)式函數(shù)

描述

hasRole([role])

用戶擁有指定的角色時(shí)返回true (Spring security默認(rèn)會(huì)帶有ROLE_前綴),去除前綴參考Remove the ROLE_

hasAnyRole([role1,role2])

用戶擁有任意一個(gè)指定的角色時(shí)返回true

hasAuthority([authority])

擁有某資源的訪問權(quán)限時(shí)返回true

hasAnyAuthority([auth1,auth2])

擁有某些資源其中部分資源的訪問權(quán)限時(shí)返回true

permitAll

永遠(yuǎn)返回true

denyAll

永遠(yuǎn)返回false

anonymous

當(dāng)前用戶是anonymous時(shí)返回true

rememberMe

當(dāng)前用戶是rememberMe用戶返回true

authentication

當(dāng)前登錄用戶的authentication對(duì)象

fullAuthenticated

當(dāng)前用戶既不是anonymous也不是rememberMe用戶時(shí)返回true

hasIpAddress('192.168.1.0/24'))

請(qǐng)求發(fā)送的IP匹配時(shí)返回true

部分朋友可能會(huì)對(duì)Authority和Role有些混淆。Authority作為資源訪問權(quán)限可大可小,可以是某按鈕的訪問權(quán)限(如資源ID:biz1),也可以是某類用戶角色的訪問權(quán)限(如資源ID:ADMIN)。當(dāng)Authority作為角色資源權(quán)限時(shí),hasAuthority('ROLE_ADMIN')與hasRole('ADMIN')是一樣的效果。

二、SPEL在全局配置中的使用

我們可以通過繼承WebSecurityConfigurerAdapter,實(shí)現(xiàn)相關(guān)的配置方法,進(jìn)行全局的安全配置(之前的章節(jié)已經(jīng)講過) 。下面就為大家介紹一些如何在全局配置中使用SPEL表達(dá)式。

2.1.URL安全表達(dá)式

config.antMatchers("/system/*").access("hasAuthority('ADMIN') or hasAuthority('USER')")

.anyRequest().authenticated();

這里我們定義了應(yīng)用/person/*URL的范圍,只有擁有ADMIN或者USER權(quán)限的用戶才能訪問這些person資源。

2.2.安全表達(dá)式中引用bean

這種方式,比較適合有復(fù)雜權(quán)限驗(yàn)證邏輯的情況,當(dāng)Spring Security提供的默認(rèn)表達(dá)式方法無法滿足我們的需求的時(shí)候。首先我們定義一個(gè)權(quán)限驗(yàn)證的RbacService。

@Component("rbacService")

@Slf4j

public class RbacService {

//返回true表示驗(yàn)證通過

public boolean hasPermission(HttpServletRequest request, Authentication authentication) {

//驗(yàn)證邏輯代碼

return true;

}

public boolean checkUserId(Authentication authentication, int id) {

//驗(yàn)證邏輯代碼

return true;

}

}

對(duì)于"/person/{id}"對(duì)應(yīng)的資源的訪問,調(diào)用rbacService的bean的方法checkUserId進(jìn)行權(quán)限驗(yàn)證,傳遞參數(shù)為authentication對(duì)象和person的id。該id為PathVariable,以#開頭表示。

config.antMatchers("/person/{id}").access("@rbacService.checkUserId(authentication,#id)")

.anyRequest().access("@rbacService.hasPermission(request,authentication)");

三、 Method表達(dá)式安全控制

如果我們想實(shí)現(xiàn)方法級(jí)別的安全配置,Spring Security提供了四種注解,分別是@PreAuthorize , @PreFilter , @PostAuthorize 和 @PostFilter

3.1.開啟方法級(jí)別注解的配置

在Spring安全配置代碼中,加上EnableGlobalMethodSecurity注解,開啟方法級(jí)別安全配置功能。

@Configuration

@EnableGlobalMethodSecurity(prePostEnabled = true)

public class MySecurityConfig extends WebSecurityConfigurerAdapter {

3.2 使用PreAuthorize注解

@PreAuthorize 注解適合進(jìn)入方法前的權(quán)限驗(yàn)證。只有擁有ADMIN角色才能訪問findAll方法。

@PreAuthorize("hasRole('ADMIN')")

List findAll();

3.3 使用PostAuthorize注解

@PostAuthorize 在方法執(zhí)行后再進(jìn)行權(quán)限驗(yàn)證,適合根據(jù)返回值結(jié)果進(jìn)行權(quán)限驗(yàn)證。Spring EL 提供返回對(duì)象能夠在表達(dá)式語言中獲取返回的對(duì)象returnObject。下文代碼只有返回值的name等于authentication對(duì)象的name才能正確返回,否則拋出異常。

@PostAuthorize("returnObject.name == authentication.name")

Person findOne(Integer id);

3.4 使用PreFilter注解

PreFilter 針對(duì)參數(shù)進(jìn)行過濾,下文代碼表示針對(duì)ids參數(shù)進(jìn)行過濾,只有id為偶數(shù)才能訪問delete方法。

//當(dāng)有多個(gè)對(duì)象是使用filterTarget進(jìn)行標(biāo)注

@PreFilter(filterTarget="ids", value="filterObject%2==0")

public void delete(List ids, List usernames) {

3.5 使用PostFilter 注解

PostFilter 針對(duì)返回結(jié)果進(jìn)行過濾,特別適用于集合類返回值,過濾集合中不符合表達(dá)式的對(duì)象。

@PostFilter("filterObject.name == authentication.name")

List findAll();

總結(jié)

以上所述是小編給大家介紹的使用Spring安全表達(dá)式控制系統(tǒng)功能訪問權(quán)限問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

總結(jié)

以上是生活随笔為你收集整理的java安全权限配置_使用Spring安全表达式控制系统功能访问权限问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。