成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Cloud OAuth2中/oauth/token的返回內(nèi)容格式

瀏覽:102日期:2023-06-28 10:51:02
目錄背景實現(xiàn)原理代碼實現(xiàn)相關(guān)類關(guān)鍵切面攔截器背景

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

訪問/oauth/token示例如下:

Spring Cloud OAuth2中/oauth/token的返回內(nèi)容格式

原始返回值的格式如下:

Spring Cloud OAuth2中/oauth/token的返回內(nèi)容格式

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

Spring Cloud OAuth2中/oauth/token的返回內(nèi)容格式

實現(xiàn)原理

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

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

方法上。

代碼實現(xiàn)相關(guān)類

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); }}關(guān)鍵切面攔截器

在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. 統(tǒng)一返回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 注解不能修改返回格式,否則授權(quán)碼模式可以統(tǒng)一改 * 因為本項目的 sso-demo/ss-sso 里面使用了 @EnableOAuth2Sso 注解,所以這里就不修改授權(quán)碼模式的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 {/** * 授權(quán)碼模式 */ String AUTHORIZATION_CODE = 'authorization_code';}

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

標簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲午夜精品久久久久久浪潮| 欧美亚洲视频| 在线综合亚洲| 国产精品久久久久久久久免费相片| 国产精品一区久久久久| 久久蜜桃资源一区二区老牛| 亚洲综合在线视频| 亚洲激情网址| 综合欧美亚洲日本| 黑人巨大精品欧美一区二区小视频| 欧美精品一区二区三区蜜桃| 国产精品自拍网站| 欧美在线色视频| 免费成人美女在线观看| 色噜噜狠狠成人中文综合| 亚洲成人资源在线| 亚洲一区二区在| 夜夜嗨av一区二区三区中文字幕| 尤妮丝一区二区裸体视频| 欧美高清在线视频| 狠狠久久婷婷| 亚洲色图一区二区| 99成人精品| 亚洲午夜精品在线| 老司机亚洲精品| 蜜臀久久99精品久久久久久9| 日本精品一区二区三区四区的功能| 日韩电影一区二区三区| 色老汉一区二区三区| 久久99精品久久久| 91精品国产综合久久精品性色| 国产精品1024| 日韩免费高清电影| 91美女蜜桃在线| 中文字幕高清一区| 亚洲成人原创| 亚洲一区二区三区四区在线免费观看| 国产精品美女诱惑| 男男gaygay亚洲| 91麻豆精品国产91久久久| 国产91富婆露脸刺激对白| 精品国产麻豆免费人成网站| 91麻豆精品秘密| 综合在线观看色| 久久国产精品久久w女人spa| 日韩精品国产欧美| 欧美日韩在线亚洲一区蜜芽| 国产精品一区二区你懂的| 日韩欧美在线影院| 91麻豆福利精品推荐| 国产精品久久久久四虎| 亚洲精品四区| 三级欧美在线一区| 欧美精品一二三| 成人ar影院免费观看视频| 国产欧美一区二区三区在线看蜜臀 | 精品少妇一区二区三区日产乱码 | 欧美成人aa大片| 欧美激情视频一区二区三区免费| 亚洲精品国产品国语在线app| 久久久久久自在自线| 国产精品一区在线观看乱码| 国产日韩欧美精品电影三级在线| 中国女人久久久| 另类小说视频一区二区| 精品国产乱码久久久久久图片| 国产一区亚洲| 亚洲成人777| 欧美一区午夜精品| 欧美深夜福利| 偷拍日韩校园综合在线| 91精品国产一区二区三区蜜臀 | 91久久国产最好的精华液| 成人自拍视频在线观看| 亚洲欧美综合网| 欧美视频日韩视频在线观看| 91色porny在线视频| 亚洲一区二区欧美| 69成人精品免费视频| 农村妇女精品| 夜夜爽夜夜爽精品视频| 欧美精品色一区二区三区| 欧美日韩精品免费观看| 亚洲一区二区三区小说| 91精品国产欧美一区二区| 黑丝一区二区| 狂野欧美性猛交blacked| 国产日韩欧美综合一区| 久久天堂成人| 波多野结衣欧美| 亚洲午夜一区二区三区| 日韩欧美中文字幕精品| 国产一区二区三区久久| 国产成人av电影免费在线观看| 中文字幕在线一区二区三区| 欧美日韩一区二区在线观看| 欧美日韩精品一区| 久久99国产精品尤物| 国产三级精品在线| 欧洲国内综合视频| 国外精品视频| 精品亚洲国内自在自线福利| 国产精品久久久久久久久果冻传媒| 在线观看欧美日本| 亚洲午夜激情| 国产高清成人在线| 亚洲电影第三页| 国产欧美一二三区| 3d动漫精品啪啪一区二区竹菊| 99国产精品久久久久久久| 成人高清av在线| 午夜国产精品一区| 国产精品热久久久久夜色精品三区| 欧美亚洲动漫另类| 黄色av日韩| 风间由美一区二区av101| 亚洲综合色噜噜狠狠| 国产亚洲综合av| 欧美日韩一二三区| 国产精品久久久久久久久久妞妞 | 精品精品欲导航| 色狠狠色噜噜噜综合网| 黄色日韩在线| 成人免费av在线| 免费在线观看不卡| 亚洲精品视频免费观看| 337p日本欧洲亚洲大胆精品| 欧美丝袜丝交足nylons| 国产日产精品一区二区三区四区的观看方式| www.视频一区| 国内精品伊人久久久久影院对白| 亚洲综合成人在线| 国产精品久久久久桃色tv| 日韩视频永久免费| 欧美午夜影院一区| 亚洲免费在线| 狠久久av成人天堂| 波多野结衣在线一区| 国产一本一道久久香蕉| 日本欧美肥老太交大片| 国产精品白丝在线| 久久九九国产精品| 欧美一二三四区在线| 欧美午夜视频网站| 麻豆精品网站| 中文国产一区| 亚洲第一伊人| 国产精品国产三级欧美二区| 91丨porny丨国产入口| 成人网男人的天堂| 国产精品亚洲一区二区三区妖精 | 亚洲高清久久| 欧美不卡视频| 成人激情图片网| 狠狠色狠狠色综合日日91app| 亚洲成人av在线电影| 亚洲综合在线观看视频| 久久久蜜臀国产一区二区| 在线免费高清一区二区三区| av在线不卡观看免费观看| 激情综合亚洲精品| 日本午夜一本久久久综合| 亚洲二区在线观看| 一区二区三区四区在线免费观看| 国产欧美日韩精品一区| 日韩欧美成人激情| 欧美一区二区三区的| 欧美性视频一区二区三区| 4hu四虎永久在线影院成人| 美女主播一区| 国产伦精品一区二区三区照片91 | 国产一区免费电影| 久久66热re国产| 久久成人av少妇免费| 久草中文综合在线| 蜜臀av国产精品久久久久| 日韩av二区在线播放| 美女视频网站久久| 极品美女销魂一区二区三区| 国产一区在线看| 国产激情一区二区三区四区| 国产传媒日韩欧美成人| 国产白丝精品91爽爽久久| 国产乱码精品一区二区三区av| 国产资源在线一区| 国产成人免费视频| 成人黄色片在线观看| 成人av免费在线播放| 99久久精品一区| 91亚洲精品久久久蜜桃网站| 成人激情动漫在线观看| 不卡一区二区三区四区| 97久久精品人人爽人人爽蜜臀| 欧美ab在线视频| 国产一区二区无遮挡| 国产精品久久久一区二区| 久久久久国产精品一区三寸| 欧美性一二三区| 欧美一二三在线| 国产性做久久久久久|