服务网关
yml配置文件
server:
port: 8080
spring:
application:
name: api_zuul_server
#路由配置
zuul:
routes:
#商品微服务
product-service: #路由id,随便写
path: /product-service/** #映射路径 #localhost:8080/product-service/sxx
url: http://127.0.0.1:9001 #映射路径对应的实际微服务url地址
order-service:
path: /order-service/**
url: http://127.0.0.1:9002
package com.yxkj.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
/**
* @USER: 文 俊
* @DATE: 2021-07-11
*
* @description: 自定义的zuul过滤器 继承父类Zuulfilter
*/
@Component
public class LoginFilter extends ZuulFilter {
/**
* 定义过滤器类型
* pre
* routing
* post
* error
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
* 指定过滤器的执行顺序
* @return
*/
@Override
public int filterOrder() {
return 1;
}
/**
* 当前过滤器是否生效
* true:使用此过滤器
* false:不适用此过滤器
* @return
*/
@Override
public boolean shouldFilter() {
return true;
}
/**
* 指定过滤器中的业务逻辑
* @return
* @throws ZuulException
*/
@Override
public Object run() throws ZuulException {
System.out.println("执行了过滤器");
return null;
}
}
身份认证
package com.yxkj.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* @USER:
* @DATE: 2021-07-11
*
* @description: 自定义的zuul过滤器 继承父类Zuulfilter
*/
@Component
public class LoginFilter extends ZuulFilter {
/**
* 定义过滤器类型
* pre
* routing
* post
* error
* @return
*/
@Override
public String filterType() {
return "pre";
}
/**
* 指定过滤器的执行顺序
* @return
*/
@Override
public int filterOrder() {
return 1;
}
/**
* 当前过滤器是否生效
* true:使用此过滤器
* false:不适用此过滤器
* @return
*/
@Override
public boolean shouldFilter() {
return true;
}
/**
* 指定过滤器中的业务逻辑
* 身份认证:
* 1.所有的请求需要携带一个参数:access-token
* 2.获取request请求
* 3.通过request获取参数access-token
* 4.判断token是否卫康
* 4.1 token ==null 身份认证失败
* 4。2 token!=null 执行后续操作
* 在zuul网关中,通过requestContext的上下文访问对象,可以获取到request对象
* @return
* @throws ZuulException
*/
@Override
public Object run() throws ZuulException {
System.out.println("执行了过滤器");
//1.获取zuul提供的上下文对象RequestContext
RequestContext ctx = RequestContext.getCurrentContext();
//2.从RequestContext中获取request
HttpServletRequest request = ctx.getRequest();
//3.获取请求参数access-token
String token = request.getParameter("access-token");
//4.判断
if(token==null){
//4.1如果token == null ,拦截请求,返回认证失败
ctx.setSendZuulResponse(false); //拦截请求
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
//4.2 如果token!=null ,绩效后续执行
return null;
}
}