SpringCloud Zuul 过滤器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yiyijianxian/article/details/85254412

今天主要介绍的是前置拦截器(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;
	}

}

 返回的结果如下图

猜你喜欢

转载自blog.csdn.net/yiyijianxian/article/details/85254412
今日推荐