- package com.fei.springcloud.filter;
- import javax.servlet.http.HttpServletRequest;
- import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
- import com.netflix.zuul.ZuulFilter;
- import com.netflix.zuul.context.RequestContext;
- /**
- * 第一个 pre 类型的 filter,prefilter01=true 才能通过
- * @author Jfei
- *
- */
- public class TestPre01Filter extends ZuulFilter{
- /**
- * 是否应该执行该过滤器, 如果是 false, 则不执行该 filter
- */
- @Override
- public boolean shouldFilter() {
- return true;
- }
- /**
- * 过滤器类型
- * 顺序: pre ->routing -> post , 以上 3 个顺序出现异常时都可以触发 error 类型的 filter
- */
- @Override
- public String filterType() {
- return FilterConstants.PRE_TYPE;
- }
- /**
- * 同 filterType 类型中, order 值越大, 优先级越低
- */
- @Override
- public int filterOrder() {
- return 1;
- }
- /**
- * 执行业务操作, 可执行 sql,nosql 等业务
- */
- @Override
- public Object run() {
- RequestContext ctx = RequestContext.getCurrentContext();
- HttpServletRequest request = ctx.getRequest();
- String prefilter01 = request.getParameter("prefilter01");
- System.out.println("执行 pre01Filter .....prefilter01=" + prefilter01 );
- // 如果用户名和密码都正确, 则继续执行下一个 filter
- if("true".equals(prefilter01) ){
- ctx.setSendZuulResponse(true);// 会进行路由, 也就是会调用 API 服务提供者
- ctx.setResponseStatusCode(200);
- ctx.set("isOK",true);// 可以把一些值放到 ctx 中, 便于后面的 filter 获取使用
- }else{
- ctx.setSendZuulResponse(false);// 不需要进行路由, 也就是不会调用 API 服务提供者
- ctx.setResponseStatusCode(401);
- ctx.set("isOK",false);// 可以把一些值放到 ctx 中, 便于后面的 filter 获取使用
- // 返回内容给客户端
- ctx.setResponseBody("{\"result\":\"pre01Filter auth not correct!\"}");// 返回错误内容
- }
- return null;
- }
- }
这是第一个自定义的 pre 类型 filter, 说以 shuldFilter() 为 true, 也就是必须执行
TestPre02Filter.java
来源: http://www.bubuko.com/infodetail-2817255.html