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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

webflux切面拦截权限,webflux整合aop,webflux获取request

發布時間:2024/10/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webflux切面拦截权限,webflux整合aop,webflux获取request 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

在springboot+tomcat應用中獲取request對象可以使用RequestContextHolder.getRequestAttributes()的方式來獲取,此種方式的核心在于request所在容器被放在threadlocal中,但是webflux結合netty項目卻不能這么使用,因為webflux是異步響應式的,下面介紹下異步服務webflux+netty如何便捷獲取request。

編寫基于webflux的RequestContextHolder實現

  • 編寫ReactiveHttpContextHolder類用來模擬RequestContextHolder
  • public class ReactiveHttpContextHolder {//獲取當前請求對象public static Mono<ServerHttpRequest> getRequest() {return Mono.subscriberContext().map(context -> context.get(Info.CONTEXT_KEY).getRequest());}//獲取當前responsepublic static Mono<ServerHttpResponse> getResponse(){return Mono.subscriberContext().map(context -> context.get(Info.CONTEXT_KEY).getResponse());}public static final class Info{public static final Class<ServerWebExchange> CONTEXT_KEY = ServerWebExchange.class;} }
  • 編寫過濾器類用于設置request到容器中
  • @Component @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE) public class AppFilter implements WebFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {//設置當前請求return chain.filter(exchange).subscriberContext(context -> context.put(ReactiveHttpContextHolder.Info.CONTEXT_KEY, exchange));} }

    編寫切面實現token攔截,校驗權限

  • 切面邏輯代碼
  • @Component @Aspect public class AuthAspect extends BaseController {@Pointcut("execution(public * xx.xx.xxController.*(..))")private void classRule(){}//帶有AuthIgnore注解的不校驗@Pointcut("@annotation(xx.AuthIgnore)")private void ignoreRule(){}@Around("classRule() && !ignoreRule()")public Mono<Object> aroundInvoke(ProceedingJoinPoint joinPoint){//獲取tokenMono<ServerHttpRequest> requestMono = ReactiveHttpContextHolder.getRequest();return requestMono.flatMap(request -> {//檢查tokenString token = getHeader("token", request);if (token == null || TokenCacheContainer.getTokenCache().get(token) == null){BusException ex = new BusException("01300001");return buildErrMsg(ex);} else {try {return (Mono<Object>) joinPoint.proceed();} catch (Throwable throwable) {LogFactory.getLog(AuthAspect.class).error("", throwable);BusException ex = new BusException("01300000");return buildErrMsg(ex);}}});}private Mono<String> buildErrMsg(BusException ex){ApiJsonResult errResult = ApiJsonResult.createErrResult(ex.getErrorCode(), ex.getReason(), ex.getResolve());return Mono.just( errResult.toString() );} }
  • 說明
    過濾器會在切面之前執行,因此aop中能獲取到在filter中設置的request
  • 測試結果
  • 總結

    以上是生活随笔為你收集整理的webflux切面拦截权限,webflux整合aop,webflux获取request的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 香蕉视频成人在线 | 日本黄色小说 | 亚洲AV成人无码网站天堂久久 | 狠狠躁狠狠躁视频专区 | 一本大道久久a久久综合婷婷 | 国产一区二区三区亚洲 | 国模大胆一区二区三区 | 理论片午夜| 日本黄色片在线播放 | 国产精品无码免费专区午夜 | 黄色三级在线播放 | 182tv午夜| 成人免费网站在线 | 99精品在线观看 | 免费亚洲精品 | 久久久成人免费 | 99免费视频 | 欧美日韩在线免费看 | 黄色日韩 | 女人被男人躁得好爽免费视频 | 成人在线视频一区二区 | 色姑娘天天操 | 久久撸视频 | av综合久久 | 久久美女免费视频 | 狠狠操综合 | 天天视频污| 亚欧美视频 | 日本视频网站在线观看 | 亚洲一区二区三区 | 久久久久国色av免费观看性色 | 日韩av一区二区在线观看 | av在线资源站 | 图片区视频区小说区 | 成人香蕉视频 | 国产精品91久久 | 国产日韩欧美 | 日韩精品在线观看免费 | 国产情侣一区二区 | 免费精品在线视频 | 国产一区日韩 | 久久午夜激情 | 午夜激情免费视频 | 久久久久这里只有精品 | 干操网| 国产日韩欧美不卡 | 草草色 | 欧美一级免费片 | 欧美三级理论片 | 另类天堂网 | 91在线精品一区二区 | 后宫秀女调教(高h,np) | 浪潮av网站| 国产黑丝av | 免费黄色的网站 | 99ri国产在线| 久久欧美 | 国产又猛又粗 | 欧美激情中文字幕 | 日韩三级观看 | 中文字幕亚洲高清 | 精品盗摄一区二区三区 | 肉丝肉足丝袜一区二区三区 | 亚洲免费网站在线观看 | 国产精品久久久久99 | 污污在线观看视频 | 免费av网址在线 | 国产成人无码精品久久二区三 | 免费观看美女裸体网站 | 日韩精品一区在线播放 | av第一福利| 伊人9 | 成人av网页 | 超碰2| 黑人巨大精品欧美一区二区蜜桃 | 欧美成人高清 | 亚洲最大福利网站 | 淫片网站 | 老子影院午夜精品无码 | 国产又粗又深又猛又爽又在线观看 | 西西人体大胆4444ww张筱雨 | 国产精品日日做人人爱 | 丰满人妻一区二区三区免费视频 | 国产私密视频 | 性xxxx搡xxxxx搡欧美 | 亚洲精品国产片 | 久久a久久 | 激情婷| 小明天天看 | 91蝌蚪少妇 | 麻豆91在线 | 青青草久| 嫩草一区 | 国产精品成人一区二区三区 | 日日撸夜夜操 | 婷婷久久综合 | 国产老熟女一区二区三区 | 国产一级高清视频 | 舐め犯し波多野结衣在线观看 |