spring cloud gateway 重定向到登陆页面的设置 继承GlobalFilter,自定义filter ,前端是vue实现的。

转:https://blog.csdn.net/qq_27093465/article/details/109738027?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.queryctrv4&spm=1001.2101.3001.4242.1&utm_relevant_index=3

在gateway做权限设置和路由,转发请求到其他子服务模块,要是token超时了,则需要给重定向到登陆页面,前端使用vue.js实现。

@Component
public class JwtTokenFilter implements GlobalFilter, Ordered {
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpResponse response = exchange.getResponse();
HttpCookie cookie = exchange.getRequest().getCookies().getFirst("TOKEN");
if (cookie != null) {
// NOTE: 服务间调用使用服务名,restTemplate必须加@LoadBalanced注解
Boolean ok = template.postForObject(authUrl, cookie.getValue(), Boolean.class);
if (ok != null && ok) {
return chain.filter(exchange);
}
}
String redirectUrl = "完整的URL地址,比如: http://192.168.22.140:8002/index.html";
logger.info("bmg 重定向到URL: {}", redirectUrl);
response.getHeaders().set(HttpHeaders.LOCATION, redirectUrl);
//303状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
response.setStatusCode(HttpStatus.SEE_OTHER);
response.getHeaders().add("Content-Type", "text/plain;charset=UTF-8");
return response.setComplete();
}
@Override
public int getOrder() {
return 1;
}
}
vue的前端要想能正常工作,得返回给他个页面,完整的html之类的,要是返回给他个json,就啥也没了,他就啥也干不了拉。

posted @ 2022-02-25 17:07  老皮肉  阅读(1347)  评论(0编辑  收藏  举报