2016-10-31 38 views
1

我使用ZuulFilter拦截请求调用。我需要通过添加像这样的附加参数来更改请求调用的url。Zuul代理添加参数以请求url

原始请求

Http://localhost:8080/home?username=Paul 

增加新的参数

Http://localhost:8080/home?username=Paul&authenticated=true 

后我不需要这个额外的参数添加到头部。我尝试使用setRequestQueryParams添加我的新参数来请求url,但它没有奏效。

你能告诉我如何使用zuul代理向url添加新参数吗?

+0

欢迎栈......请加你的过滤器试图让别人可以帮你。 –

回答

0

创建一个过滤器。

public class SimpleCORSFilter implements Filter { 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException {} 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) req; 
     Map<String, String[]> qp = new HashMap<String, String[]>(); 
     for(String key : request.getParameterMap().keySet()){ 
      qp.put(key, new String[]{request.getParameterMap().get(key)[0]}); 
     } 
     ...... 
     qp.put("authenticated", new String[]{""}); 
     chain.doFilter(new PrettyFacesWrappedRequest(request, qp), resp); 
    } 

    @Override 
    public void destroy() {} 
} 

在Application.java

@Bean 
public SimpleCORSFilter simpleCORSFilter(){ 
    return new SimpleCORSFilter(); 
} 
0

您也可以使用ZuulFilter这一点。创建ZuulFilter类:

public class AuthenticatedFilter extends ZuulFilter{ 

    @Override 
    public String filterType() { 
    return "pre"; 
    } 

    @Override 
    public int filterOrder() { 
    return 10; 
    } 

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

    @Override 
    public Object run() { 
    RequestContext context = RequestContext.getCurrentContext(); 
    Map<String, List<String>> newParameterMap = new HashMap<>(); 
    Map<String, String[]> parameterMap = context.getRequest().getParameterMap(); 
    //getting the current parameter 
    for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { 
     String key = entry.getKey(); 
     String[] values = entry.getValue(); 
     newParameterMap.put(key, Arrays.asList(values)); 
    } 
    //add a new parameter 
    String authenticatedKey = "authenticated"; 
    String authenticatedValue = "true"; 
    newParameterMap.put(authenticatedKey,Arrays.asList(authenticatedValue)); 
    context.setRequestQueryParams(newParameterMap); 
    return null; 
    } 
} 

而在你@SpringBootApplication添加过滤器作为豆

@Bean 
    public AuthenticatedFilter authenticatedFilter() { 
    return new AuthenticatedFilter(); 
    }