springcloud-使用路由网关统一访问接口(附代码下载):
https://blog.csdn.net/badao_liumang_qizhi/article/details/102733039
在上面已经实现使用路由网关统一访问接口后,下面使用路由网关的服务过滤功能。
注:
博客:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
前面使用zuul实现路由统一网管功能。启示zuul还有一个功能是服务过滤功能。
只需要继承zuulfilter类并在类上添加@component注解就可以了。
在项目包下新建filter包,包下新建类loginfilter
package com.badao.hello.spring.cloud.zuul.filter; import com.netflix.zuul.zuulfilter; import com.netflix.zuul.context.requestcontext; import com.netflix.zuul.exception.zuulexception; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.stereotype.component; import javax.servlet.http.httpservletrequest; import java.io.ioexception; @component public class loginfilter extends zuulfilter { private static final logger logger = loggerfactory.getlogger(loginfilter.class); /** * 配置过滤类型,有四种不同生命周期的过滤器类型 * 1. pre:路由之前 * 2. routing:路由之时 * 3. post:路由之后 * 4. error:发送错误调用 * @return */ @override public string filtertype() { return "pre"; } /** * 配置过滤的顺序 * @return */ @override public int filterorder() { return 0; } /** * 配置是否需要过滤:true/需要,false/不需要 * @return */ @override public boolean shouldfilter() { return true; } /** * 过滤器的具体业务代码 * @return * @throws zuulexception */ @override public object run() throws zuulexception { //获取httpservletrequest对象 requestcontext context = requestcontext.getcurrentcontext(); httpservletrequest request = context.getrequest(); logger.info("{} >>> {}", request.getmethod(), request.getrequesturl().tostring()); //获取请求参数token--令牌 string token = request.getparameter("token"); if (token == null) { logger.warn("token is empty"); //s设置zuul响应为false context.setsendzuulresponse(false); //设置响应状态码为401-没有权限 context.setresponsestatuscode(401); try { //向页面显示内容 context.getresponse().getwriter().write("no authority"); } catch (ioexception e) { } } else { logger.info("ok"); } return null; } }
注:
需要重写4个方法,具体作用如下。
在具体过滤方法中,这里是判断请求时是否有token参数,没有则是没有权限。
配置过滤类型,有四种不同生命周期的过滤器类型
1.
pre:路由之前
2. routing:路由之时
3.
post:路由之后
4. error:发送错误调用
配置过滤的顺序,数值越小越靠前。
配置是否需要过滤:true/需要,false/不需要。
过滤器的具体业务代码
至此整个服务体系的结构如下
我们依次启动eureka服务、服务提供者、两个服务消费者、zuul的application启动类
再打开浏览器输入:
http://localhost:8769/api/a/hi?message=hellozuul
此时如果带着token参数去请求,再次打开浏览器输入:
http://localhost:8769/api/a/hi?message=hellozuul&token=badao
如对本文有疑问, 点击进行留言回复!!
网友评论