JAVA全系列 教程
3762个小节阅读:7094.5k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
org:
my:
jwt:
#跳过认证的路由
skipAuthUrls:
- /user/login
xxxxxxxxxx
@Data
@Slf4j
@Component
@ConfigurationProperties("org.my.jwt")
public class LoginGlobalFilter implements GlobalFilter, Ordered {
// 跳过路由数组
private String[] skipAuthUrls;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//获取请求url地址
String url = exchange.getRequest().getURI().getPath();
//跳过不需要验证的路径
if (null != skipAuthUrls && isSkipUrl(url)) {
return chain.filter(exchange);
}
//从请求头中取得token
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (StringUtils.isEmpty(token)) {
return createResponseObj(exchange,500,"token参数缺失");
}
//请求中的token是否有效
boolean verifyResult = JWTUtil.verify(token);
if (!verifyResult) {
return createResponseObj(exchange,500,"token 失效");
}
//如果各种判断都通过,执行chain上的其他业务逻辑
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
/**
* 判断当前访问的url是否开头URI是在配置的忽略url列表中
*
* @param url
* @return
*/
public boolean isSkipUrl(String url) {
for (String skipAuthUrl : skipAuthUrls) {
if (url.startsWith(skipAuthUrl)) {
return true;
}
}
return false;
}
// 组装返回数据
private Mono<Void> createResponseObj(ServerWebExchange exchange,Integer code,String message){
ServerHttpResponse response = exchange.getResponse();
// 设置响应状态码200
response.setStatusCode(HttpStatus.OK);
// 设置响应头
response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
// 创建响应对象
Response res = new Response(code, message);
// 把对象转成字符串
byte[] responseByte = JSONObject.toJSONString(res).toString().getBytes(StandardCharsets.UTF_8);
DataBuffer buffer = response.bufferFactory().wrap(responseByte);
return response.writeWith(Flux.just(buffer));
}
}