SpringCloud学习笔记-服务网关-Zuul-权限校验

  1. 创建前置过滤器
    package com.hx.apigeteway.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 org.apache.http.HttpStatus;
    import org.springframework.stereotype.Component;
    
    import javax.servlet.http.HttpServletRequest;
    
    import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
    import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
    
    @Component
    public class TokenFilter extends ZuulFilter {
        @Override
        public String filterType() {  //过滤器类型  属于前缀
            return PRE_TYPE;
        }
    
        @Override
        public int filterOrder() {  //过滤器顺序  数字越小越靠前
            return PRE_DECORATION_FILTER_ORDER - 1;
        }
    
        @Override
        public boolean shouldFilter() {  // 设置为true  代表这个过滤器是否生效
            return true;
        }
    
        //主要的处理逻辑的地方,我们做权限控制、日志等都是在这里。
        @Override
        public Object run() throws ZuulException {
            RequestContext requestContext=RequestContext.getCurrentContext();
            HttpServletRequest request = requestContext.getRequest();
            //这里从请求头参数获取
            //request.getHeader("token");
            //这里从请求中参数获取
            String token = request.getParameter("token");
            if(StringUtils.isEmpty(token)){
                requestContext.setSendZuulResponse(false);
                requestContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
            }
            return null;
        }
    }
    

     

  2. 创建后置过滤器
    package com.hx.apigeteway.filter;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import com.netflix.zuul.exception.ZuulException;
    import org.springframework.stereotype.Component;
    
    import javax.servlet.http.HttpServletResponse;
    
    import java.util.UUID;
    
    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;
    
    @Component
    public class AddResponseHeaderFilter  extends ZuulFilter {
        @Override
        public String filterType() {
            return POST_TYPE;
        }
    
        @Override
        public int filterOrder() { //FilterConstants
            return SEND_RESPONSE_FILTER_ORDER -1;
        }
    
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() throws ZuulException {
            RequestContext requestContext=RequestContext.getCurrentContext();
            HttpServletResponse response = requestContext.getResponse();
            response.setHeader("test", UUID.randomUUID().toString());
            return null;
        }
    }
    

     

你可能感兴趣的:(SpringCloud)