日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Cloud OAuth2中/oauth/token的返回內容格式

瀏覽:133日期:2023-06-28 10:51:02
目錄背景實現原理代碼實現相關類關鍵切面攔截器背景

在前后端分離的項目中,一般后端返回給前端的格式是一個固定的json格式。在這個前提下,Spring Cloud OAuth2 生成access token的請求/oauth/token的返回內容就需要自定義。

訪問/oauth/token示例如下:

Spring Cloud OAuth2中/oauth/token的返回內容格式

原始返回值的格式如下:

Spring Cloud OAuth2中/oauth/token的返回內容格式

我們希望使用我們自己固定的json格式,如下:

Spring Cloud OAuth2中/oauth/token的返回內容格式

實現原理

原理就是通過切面編程實現對/oauth/token端點請求的結果進行攔截封裝處理,由于/oauth/token是Spring Cloud OAuth2的內部端點,因此需要對相關的Spring源碼進行分析。最終定位到

org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken()

方法上。

代碼實現相關類

CodeEnum.java

package com.wongoing.common.model;/** * @description: 代碼枚舉 * @author: zheng * @date: Created in 2021/1/26 11:18 * @version: 0.0.1 * @modified By: */public enum CodeEnum { SUCCESS(0), ERROR(1); private Integer code; CodeEnum(Integer code) {this.code = code; } public Integer getCode() {return this.code; }}

Result.java

package com.wongoing.common.model;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;/** * @description: Rest API 接口方法返回類型定義 * @author: zheng * @date: Created in 2021/1/26 13:25 * @version: 0.0.1 * @modified By: */@Data@NoArgsConstructor@AllArgsConstructorpublic class Result<T> implements Serializable { private T data; private Integer code; private String msg; public static <T> Result<T> of(T data, Integer code, String msg) {return new Result<>(data, code, msg); } public static <T> Result<T> succeed(String msg) {return of(null, CodeEnum.SUCCESS.getCode(), msg); } public static <T> Result<T> succeed(T model, String msg) {return of(model, CodeEnum.SUCCESS.getCode(), msg); } public static <T> Result<T> succeed(T model) {return of(model, CodeEnum.SUCCESS.getCode(), ''); } public static <T> Result<T> failed(String msg) {return of(null, CodeEnum.ERROR.getCode(), msg); } public static <T> Result<T> failed(T model, String msg) {return of(model, CodeEnum.ERROR.getCode(), msg); }}關鍵切面攔截器

在uaa項目中定義OauthTokenAspect.java

package com.wongoing.oauth2.filter;import com.wongoing.common.constant.SecurityConstants;import com.wongoing.common.context.TenantContextHolder;import com.wongoing.common.model.Result;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.security.authentication.InsufficientAuthenticationException;import org.springframework.security.core.Authentication;import org.springframework.security.oauth2.common.OAuth2AccessToken;import org.springframework.security.oauth2.common.util.OAuth2Utils;import org.springframework.security.oauth2.provider.OAuth2Authentication;import org.springframework.stereotype.Component;import java.security.Principal;import java.util.Map;/** * @description: oauth-token攔截器 * 1. 賦值租戶 * 2. 統一返回token格式 * * @author: zheng * @date: Created in 2021/7/12 16:25 * @version: 0.0.1 * @modified By: */@Slf4j@Component@Aspectpublic class OauthTokenAspect { @Around('execution(* org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(..))') public Object handleControllerMethod(ProceedingJoinPoint joinPoint) throws Throwable {try { Object[] args = joinPoint.getArgs(); Principal principal = (Principal) args[0]; if (!(principal instanceof Authentication)) {throw new InsufficientAuthenticationException('There is no client authentication. Try adding an appropriate authentication filter.'); } String clientId = this.getClientId(principal); Map<String, String> parameters = (Map<String, String>) args[1]; String grantType = parameters.get(OAuth2Utils.GRANT_TYPE); //保存租戶id TenantContextHolder.setTenant(clientId); Object proceed = joinPoint.proceed(); if (SecurityConstants.AUTHORIZATION_CODE.equals(grantType)) {/** * 如果使用 @EnableOAuth2Sso 注解不能修改返回格式,否則授權碼模式可以統一改 * 因為本項目的 sso-demo/ss-sso 里面使用了 @EnableOAuth2Sso 注解,所以這里就不修改授權碼模式的token返回值了 */return proceed; } else {ResponseEntity<OAuth2AccessToken> responseEntity = (ResponseEntity<OAuth2AccessToken>) proceed;OAuth2AccessToken body = responseEntity.getBody();return ResponseEntity.status(HttpStatus.OK).body(Result.succeed(body)); }} finally { TenantContextHolder.clear();} } private String getClientId(Principal principal) {Authentication client = (Authentication) principal;if (!client.isAuthenticated()) { throw new InsufficientAuthenticationException('The client is not authenticated.');}String clientId = client.getName();if (client instanceof OAuth2Authentication) { clientId = ((OAuth2Authentication) client).getOAuth2Request().getClientId();}return clientId; }}

其中的常量值:

public abstract class OAuth2Utils {public static final String GRANT_TYPE = 'grant_type';}

public interface SecurityConstants {/** * 授權碼模式 */ String AUTHORIZATION_CODE = 'authorization_code';}

到此這篇關于Spring Cloud OAuth2中/oauth/token的返回內容格式的文章就介紹到這了,更多相關Spring Cloud OAuth2返回內容格式內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文字幕| 欧美日韩a区| 精品视频自拍| 国产极品嫩模在线观看91精品| 亚洲开心激情| 亚洲精品高潮| 丝袜美腿亚洲色图| 亚洲色图网站| 日韩精品成人| 国产欧美日韩综合一区在线播放| 国产日韩欧美中文在线| 欧美精品不卡| 天堂√8在线中文| 丝袜av一区| 午夜国产欧美理论在线播放| 香蕉成人久久| 亚洲一级大片| 国产欧美亚洲一区| 精品国产aⅴ| 日韩欧美少妇| 国产精品三上| 亚洲欧美在线专区| 国产亚洲电影| 亚洲精品成人图区| 91久久久精品国产| 亚洲免费影视| 日韩精品亚洲专区| 综合一区av| 久久不见久久见中文字幕免费| 麻豆精品99| 国产精品亚洲一区二区三区在线观看| 秋霞影院一区二区三区 | 蜜臀久久99精品久久久久久9 | 久久99精品久久久野外观看| 国产+成+人+亚洲欧洲在线| 久久久精品网| aⅴ色国产欧美| 国产欧美日韩精品高清二区综合区| 国产剧情一区| 成人精品动漫一区二区三区| 久久国产影院| 首页亚洲欧美制服丝腿| 青草综合视频| av在线资源| 国产亚洲一级| 国产日韩欧美在线播放不卡| 精品国产亚洲一区二区三区在线 | 国产精品第一国产精品| 中文av在线全新| 国产亚洲福利| 国产精品扒开腿做爽爽爽软件| 97在线精品| 亚洲一区二区三区四区五区午夜 | 久久国产人妖系列| 色婷婷色综合| 久久xxxx| 高清久久一区| 午夜在线视频观看日韩17c| 久久精品999| 999久久久免费精品国产| 亚洲最新av| 国产高清不卡| 深夜福利一区| 日韩欧美1区| 日韩一区二区三区精品视频第3页| 精品一区二区三区中文字幕| 午夜国产欧美理论在线播放| 国产亚洲久久| 欧美日韩精品免费观看视频完整| 一级欧美视频| 蜜桃精品在线| 欧美一区网站| 欧洲毛片在线视频免费观看| 日本欧美韩国一区三区| 日韩免费在线| 国产丝袜一区| 国产综合精品| 欧美1区2区3| 爽爽淫人综合网网站 | 日韩一区二区三区精品| 久久久久亚洲| 国产精区一区二区| 99国产精品久久久久久久成人热| 国产欧美日韩亚洲一区二区三区| 午夜国产精品视频免费体验区| 里番精品3d一二三区| 亚洲精品123区| 国产一区二区三区国产精品| 日韩欧美中文字幕电影| 999国产精品视频| 国产精久久久| 午夜性色一区二区三区免费视频| 色88888久久久久久影院| 国产精品videossex| 视频在线观看91| 久久久久中文| 精品一区二区三区中文字幕 | 亚洲精品电影| 成人在线超碰| 久久国产人妖系列| 在线亚洲成人| 91精品国产成人观看| 久久99久久人婷婷精品综合| 日韩欧美精品一区二区综合视频| 免费久久久久久久久| 免费在线亚洲欧美| 日韩1区2区日韩1区2区| 综合五月婷婷| 丝袜美腿成人在线| 亚洲精品午夜av福利久久蜜桃| 欧美好骚综合网| **爰片久久毛片| 日韩在线视频一区二区三区| 午夜在线精品| 亚洲综合另类| 日韩影院在线观看| 夜夜嗨网站十八久久| 好看不卡的中文字幕| 久久久久网站| 亚洲成人av观看| 91精品xxx在线观看| 麻豆91在线播放| 另类综合日韩欧美亚洲| 国产亚洲第一伦理第一区| 亚洲精品大全| 亚洲综合中文| 悠悠资源网久久精品| 欧美1区免费| 久久精选视频| 久久久久99| 国产综合亚洲精品一区二| 蜜臀国产一区| 日韩免费av| 亚洲成人va| 青青久久av| 亚洲精品97| 丝袜国产日韩另类美女| 美女精品在线观看| 日韩精品一级二级| 蜜臀国产一区二区三区在线播放| 香蕉久久久久久久av网站| 91精品电影| 国产一区导航| 亚洲精品在线a| 欧美一区二区三区免费看| 久久激情五月婷婷| 久久福利在线| 精品国产欧美日韩一区二区三区| 国产精品chinese| 精品三级久久久| 日韩欧美网址| 亚洲一级黄色| 亚洲免费黄色| 日韩一区二区三免费高清在线观看| 中文字幕日韩欧美精品高清在线| 中文字幕亚洲精品乱码| 日韩精选在线| 久久亚洲精精品中文字幕| 国产一区二区三区四区五区传媒| 成人欧美一区二区三区的电影| 精品亚洲美女网站| 巨乳诱惑日韩免费av| 欧美一区二区三区久久| 精品精品国产三级a∨在线| 人在线成免费视频| 亚洲女同中文字幕| 在线看片日韩| 国产精品高清一区二区| www.51av欧美视频| 1024精品一区二区三区| 天堂av在线一区| 日韩视频1区| 精品三级久久久| 一区二区亚洲精品| 日韩欧美中文字幕电影| 精品国产亚洲一区二区三区在线 | 亚洲国产影院| 中文字幕日韩亚洲| 久久精品国产久精国产| 亚洲视频综合| 日本伊人午夜精品| 青青青免费在线视频| 亚洲婷婷丁香| 另类综合日韩欧美亚洲| 国产v综合v| 日本伊人午夜精品| 另类中文字幕国产精品| 日韩中文字幕| 国产成人精品亚洲日本在线观看| 爽爽淫人综合网网站| 美女视频黄 久久| 99在线观看免费视频精品观看| 国产剧情在线观看一区| 欧美一级精品| 国产图片一区| 伊人影院久久| 国产一区二区三区91| 亚洲久草在线| 日本а中文在线天堂| 免费在线观看日韩欧美|