Zuul 请求过滤
请求过滤的本质就是对接口的访问权限进行限制,实现的思路大致有以下几种:
1.为每个服务写一套校验签名和鉴别权限的过滤器和拦截器。(代码是真的冗余)。
2. 将校验权限剥离,构成一个独立的鉴权服务。(换汤不换药,还是代码冗余)。
3. 在API网关中实现对客户端请求的校验。(请求过滤)。
如何实现
实现ZuulFilter
package com.bobo.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import javax.servlet.http.HttpServletRequest;
public class TokenFilter extends ZuulFilter{
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
String token = request.getParameter("token");
if (StringUtils.isBlank(token)) {
requestContext.setSendZuulResponse(false);
requestContext.setResponseStatusCode(401);
return null;
}
return null;
}
}
配置Filter
package com.bobo;
import com.bobo.filter.TokenFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
@EnableZuulProxy
@SpringBootApplication
public class GetewayApiApplication {
public static void main(String[] args) {
SpringApplication.run(GetewayApiApplication.class, args);
}
@Bean
public TokenFilter tokenFilter() {
return new TokenFilter();
}
}
启动eureka、eureka-server 、feign-comsumer、gateway-api这四个项目
如果大家对项目不知道,可以去访问我的git地址[springCloudgit地址](https://github.com/wuxiaobocom/springCloud)。
eureka中心是这样的:

在请求中不加入token,请求是这样的:

加入token是这样子滴:
