//微服务全局登录用户id注解如配置.java
// 定义 登录用户id 注解
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LoginUserid {
boolean required() default true;
}
// springcloud-gateway
//实现GlobalFilter接口,在 filter 接口鉴权通过之后,
//将用户信息用 Base64 encode之后,置于ServerWebExchange中,方便微幅端接收.
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders httpHeaders = request.getHeaders();
String token = httpHeaders.getFirst("usr-token");
if (!StringUtils.isEmpty(token)) {
String authHeaderUid = Base64.getEncoder().encodeToString(String.valueOf(userId).getBytes(StandardCharsets.UTF_8));
ServerHttpRequest shr = exchange.getRequest().mutate().
header("Authorized-UserId", new String[]{authHeaderUid}).build();
return chain.filter(exchange.mutate().request(shr).build());
}
return loginRequired(exchange.getResponse()); // 提示登录
}
/*
定义 userid 解析器,其做用是解析 来自 微服务网关中
预编码过的用户id字符串(请求头中),方便各个具体的微服务
模块中各个 action (controller) 直接使用 userId;
*/
public class LoginUserHandlerMethodArgumentResolver implements org.springframework.web.method.support.HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.hasParameterAnnotation(LoginUserid.class);
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
String encodedUserId = nativeWebRequest.getHeader("Authorized-UserId"); // passed from gateway
if (StringUtils.isEmpty(hashedUserId)) return null;
Long userId = Long.parseLong(new String(Base64.getDecoder().decode(encodedUserId)));
return userId;
}
}
// 例如
// 在 user-service 微服务中 进行如下配置
@Configuration
public class serWebMvcConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new LoginUserHandlerMethodArgumentResolver());
}
}
@RestController
public class UserControllerStub {
@GetMapping("/echo")
public Map<String, Object> echo(@LoginUserid Long uid) {
System.out.println("echo() runs : " + uid);
return Map.of();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Gitee 七周年码力传递,代码段/代码故事/代码注释/代码运行结果等等
共97个文件
md:29个
java:4个
cpp:4个
0 下载量 49 浏览量
2023-07-08
17:52:07
上传
评论
收藏 75KB ZIP 举报
温馨提示
Gitee 七周年码力传递,代码段/代码故事/代码注释/代码运行结果等等...
资源推荐
资源详情
资源评论
收起资源包目录
gitee-7th-event-3-master.zip (97个子文件)
gitee-7th-event-3-master
发个sql吧 去除了一些注释 5KB
简单的宇宙旋转就完事了 7KB
这是一段可怕的 Helm 模板.tpl 4KB
Scala-来递归一下吧 266B
最牛逼的获取下一天时间 375B
狗头保命.md 2KB
码力检测第三关.md 949B
最喜欢的随机打散数组(亦可用于取不重复随机数) 115B
haskell实现红黑树.hs 2KB
代码注释-代码格式.java.md 593B
光影.html 250B
真男人就玩一下这个.md 55B
矩阵乘法.asm 3KB
python-无穷无尽好看的图片.md 385B
一行代码的魅力 519B
代码我写的,SB怎么了.md 333B
没衣服换了 376B
spring 330B
人人都会用“智能”对话机器人.md 876B
欲言又止.js 13KB
通用树形结构数据转换帮助类.java 3KB
F#编程语言实现的Monads.fs 8KB
大头兵的出师杰作.md 172B
猜猜生日 2KB
一个亿的代码Python版.py 48B
玩转tensorflow 809B
让你虎躯一震的代码.c 12B
我佛慈悲.js 1KB
爱情公式.md 67B
NULL.c 87B
微服务全局登录用户id注解如配置.java 3KB
价值一个亿的人工智能.md 538B
最蛋疼的hello.md 1KB
一段让你认清现实的Java代码.java 2KB
JavaScript算法优化之达夫设备✅.md 1KB
九行模式匹配规则秒杀ProjectEuler 54题-ShowHand.md 1KB
那就看看我同事的命名吧 365B
恶搞电脑自爆.vbe 324B
最没意思的代码.md 40B
获取明天日期.md 322B
神奇的golang时间戳! 200B
代码不精,错撼一生 375B
PHP是世界上最好的语言.md 515B
eWebEditor老版本在新版IE按钮报错的解决方案.js 988B
核心价值观编码器,分享网址利器.md. 3KB
有意思的代码注释(欢迎补充).md 1KB
超级赛亚人.md 39KB
珍藏多年,只为给你 2KB
默默看着大佬的代码发抖.md 201B
我以为的人生 1KB
看看你有多深.java 260B
微信定时问好-python 417B
做一个卧底的.py 107B
检查小程序是否有新版本发布 3KB
一段多表联查的的SQL,包含计数,包含分组,包含排序,包含统计 693B
日常读取数据 571B
你没见过的狗gou语言代码.gou 448B
奇怪的代码祈求.md 138B
C++ Bind.cpp 2KB
分享下找女朋友的经验.html 589B
入坑第一码.md 172B
一段tpl模板 458B
undefined.md 11KB
返回时间转换为00:00:00格式 252B
沙雕代码 271B
输入时间戳给你返回几天前 3KB
我的垃圾作业 1KB
阿里巴巴2015年前端面试题 763B
F#编程语言实现的生命游戏.fs 1KB
php来一发 22B
来写个helloworld吧.md 535B
清除缓存 59B
python 青春有你2 数据分析都是漂亮的小姐姐哦 6KB
小工具合集||python||sh 8KB
别开玩笑哈.md 1KB
模板元编程编译期N皇后解.cpp 4KB
实现一个帐号拥有N个密码的PHP代码.md 1KB
这是golang还是c++啊啊.cpp 343B
图片转字符画.md 1KB
还是拜佛吧 873B
请不要离开我(+﹏+).html 202B
不要看🙅-机密文件.md 784B
视频图片去水印 941B
宇宙灰船.md 2KB
手势验证码绘制轨迹 553B
F#编程语言实现的链表.fs 195B
滑块验证码 759B
头疼的泛型 144B
直男癌.md 620B
shuziyu.cpp 2KB
HTML是编程语言 254B
想要你一个评论,就像对我说晚安 104B
新建文件(1)、狗头 109B
猜数字 920B
happybirthday.html 3KB
有了这代码_斗图没输过.py 1KB
神仙打架.py 863B
共 97 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6732
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功