zuul (1) pre 와 post 필터

15143 단어 springcloud
새 항목 api - gateway, pom
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-client</artifactId>
</dependency>

zuul 설정 추가
zuul:
  routes:
#          
    myProduct:
      path: /myProduct/**
      serviceId: product
#        cookie           
      sensititiveHeaders:
#        
#    product: /myProduct/**
#          
  ignored-patterns:
    - /**/product/listForOrder
management:
  security:
    enabled: false

main 방법 에 주 해 를 달다
@EnableZuulProxy//        


새 클래스 ZuulConfig 는 통일 설정 센터 config 의 동적 새로 고침 에 사용 합 니 다.
@Component
public class ZuulConfig {

    @ConfigurationProperties("zuul")
    @RefreshScope//    
    public ZuulProperties zuulProperties(){
        return new ZuulProperties();
    }
}

첫 번 째 사용 상황 은 전치 (pre) 필 터 를 사용 하여 token 이 유효한 지 검증 합 니 다
/**
 *   token  
 * @author xwq
 * @create 2020-04-23 15:13
 **/
@Component
public class TockeFilter  extends ZuulFilter {
    @Override
    public String filterType() {
        return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER-1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     *      
     * @return
     */
    @Override
    public Object run() {
        RequestContext requestContext = RequestContext.getCurrentContext();

        HttpServletRequest request = requestContext.getRequest();

        //    url    
        String token = request.getParameter("token");

        if(StringUtils.isEmpty(token)){
            //    
            requestContext.setSendZuulResponse(false);
            requestContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
        }

        return null;
    }
}

두 번 째, 리 셋 (post) 을 사용 하여 되 돌아 오 는 결과 에 물건 을 추가 합 니 다.
/**
 *                
 *
 * @author xwq
 * @create 2020-04-23 15:28
 **/
@Component
public class AddResponseHeaderFilter extends ZuulFilter {


    @Override
    public String filterType() {
        return POST_TYPE;
    }

    @Override
    public int filterOrder() {
        return SEND_RESPONSE_FILTER_ORDER - 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     *      
     *          
     * @return
     */
    @Override
    public Object run() {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletResponse  response = requestContext.getResponse();

        response.setHeader("X-Foo", UUID.randomUUID().toString());
        System.out.println(".....");
        return null;
    }
}

좋은 웹페이지 즐겨찾기