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

@Component 
public class JwtTokenFilter implements GlobalFilter, Ordered { 
    @Override 
    public Mono<Void> 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,就啥也没了,他就啥也干不了拉。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!