日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
聊聊SpringSecurity的新接口AuthorizationManager

搶一個(gè)玩玩吧,別忘了分享給別的同學(xué)們。

公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出襄垣免費(fèi)做網(wǎng)站回饋大家。

AuthorizationManager

它用來(lái)檢查當(dāng)前認(rèn)證信息Authentication是否可以訪問(wèn)特定對(duì)象T。AuthorizationManager將訪問(wèn)決策抽象更加泛化。

@FunctionalInterface
public interface AuthorizationManager {

default void verify(Supplier authentication, T object) {
AuthorizationDecision decision = check(authentication, object);
// 授權(quán)決策沒(méi)有經(jīng)過(guò)允許就403
if (decision != null && !decision.isGranted()) {
throw new AccessDeniedException("Access Denied");
}
// todo 沒(méi)有null 的情況
}

// 鉤子方法。
@Nullable
AuthorizationDecision check(Supplier authentication, T object);

}

我們只需要實(shí)現(xiàn)鉤子方法check就可以了,它將當(dāng)前提供的認(rèn)證信息authentication和泛化對(duì)象T進(jìn)行權(quán)限檢查,并返回AuthorizationDecision,AuthorizationDecision.isGranted將決定是否能夠訪問(wèn)當(dāng)前資源。AuthorizationManager提供了兩種使用方式。

基于配置

為了使用AuthorizationManager,引入了相關(guān)配置是AuthorizeHttpRequestsConfigurer,這個(gè)配置類非常類似于第九章中的基于表達(dá)式的訪問(wèn)控制。

基于AuthorizationManager的訪問(wèn)控制.png

在Spring Security 5.5中,我們就可以這樣去實(shí)現(xiàn)了:

      // 注意和 httpSecurity.authorizeRequests的區(qū)別
httpSecurity.authorizeHttpRequests()
.anyRequest()
.access((authenticationSupplier, requestAuthorizationContext) -> {
// 當(dāng)前用戶的權(quán)限信息 比如角色
Collection authorities = authenticationSupplier.get().getAuthorities();
// 當(dāng)前請(qǐng)求上下文
// 我們可以獲取攜帶的參數(shù)
Map variables = requestAuthorizationContext.getVariables();
// 我們可以獲取原始request對(duì)象
HttpServletRequest request = requestAuthorizationContext.getRequest();
//todo 根據(jù)這些信息 和業(yè)務(wù)寫邏輯即可 最終決定是否授權(quán) isGranted
boolean isGranted = true;
return new AuthorizationDecision(isGranted);
});

這樣門檻是不是低多了呢?同樣地,它也可以作用于注解。

基于注解

AuthorizationManager還提供了基于注解的使用方式。但是在了解這種方式之前我們先來(lái)看看它的實(shí)現(xiàn)類關(guān)系:

AuthorizationManager的實(shí)現(xiàn)

胖哥發(fā)現(xiàn)這一點(diǎn)也是從AuthorizationManager的實(shí)現(xiàn)中倒推出來(lái)的,最終發(fā)現(xiàn)了@EnableMethodSecurity這個(gè)注解,它的用法和@EnableGlobalMethodSecurity類似,對(duì)同樣的三種注解(參見EnableGlobalMethodSecurity)進(jìn)行了支持。用法也幾乎一樣,開啟注解即可使用:

@EnableMethodSecurity(
securedEnabled = true,
jsr250Enabled = true)
public class MethodSecurityConfig {

}

例子就不在這里重復(fù)了。


網(wǎng)站題目:聊聊SpringSecurity的新接口AuthorizationManager
文章URL:http://www.dlmjj.cn/article/cojcopg.html