今天主要介绍的是前置拦截器(Pre)和后置拦截器(Post)
1.Pre主要实现的是所有的请求中都必须含有token参数,如果没有就不让通过,代码如下
package com.lfv.product.filter;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import io.micrometer.core.instrument.util.StringUtils;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
import javax.servlet.http.HttpServletRequest;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
/**
* PRE Filter 前置过滤器
* @author lf
*
*/
@Component
public class TokenFilter extends ZuulFilter {
@Override
public boolean shouldFilter() {
return true;
}
@Override
public int filterOrder() {
return PRE_DECORATION_FILTER_ORDER - 1;
}
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public Object run() throws ZuulException {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
String tocken = request.getParameter("tocken");
if(StringUtils.isNotBlank(tocken)) {
System.out.println("tocken="+tocken);
}else {
requestContext.setSendZuulResponse(false);//验证不不通过
requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());//返回401 权限不足
}
return null;
}
}
无tocken的访问,返回401权限没有通过
有token的访问
2.Post 后置拦截器代码如下
package com.lfv.product.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.POST_TYPE;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SEND_RESPONSE_FILTER_ORDER;
import java.util.Date;
import javax.servlet.http.HttpServletResponse;
/**
* Post后置过滤器,向返回值正添加数据
* @author lf
*
*/
@Component
public class AddResponseHeaderFilter extends ZuulFilter {
@Override
public Object run() throws ZuulException {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletResponse response = requestContext.getResponse();
response.setHeader("Zuul Post Filter response", (new Date())+"");
return null;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public int filterOrder() {
return SEND_RESPONSE_FILTER_ORDER - 1;
}
@Override
public String filterType() {
return POST_TYPE;
}
}
返回的结果如下图