A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等。 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖它的四个方法,如下:
1、 shouldFilter:返回一个Boolean值,判断该过滤器是否需要执行。返回true表示要执行此过虑器,否则不执 行。
2、 run:过滤器的业务逻辑。
3、 filterType:返回字符串代表过滤器的类型,如下 pre:请求在被路由之前 执行 routing:在路由请求时调用 post:在routing和errror过滤器之后调用 error:处理请求时发生错误调用
4、 filterOrder:此方法返回整型数值,通过此数值来定义过滤器的执行顺序,数字越小优先级越高。
4.5.2测试 过虑所有请求,判断头部信息是否有Authorization,如果没有则拒绝访问,否则转发到微服务。 定义过虑器,使用@Component标识为bean。
[AppleScript] 纯文本查看 复制代码
@Component public class LoginFilterTest extends ZuulFilter {       private static final Logger LOG = LoggerFactory.getLogger(LoginFilterTest.class);     
    @Override   
 public String filterType() {     
    return "pre"; 
   }   
    @Override  
   public int filterOrder() {      
   return 2;//int值来定义过滤器的执行顺序,数值越小优先级越高  
   }   
    @Override  
   public boolean shouldFilter() {// 该过滤器需要执行     
    return true;

[AppleScript] 纯文本查看 复制代码
}    
   @Override   
  public Object run() {   
      RequestContext requestContext = RequestContext.getCurrentContext();   
      HttpServletResponse response = requestContext.getResponse(); 
        HttpServletRequest request = requestContext.getRequest();     
    //取出头部信息Authorization      
  String authorization = request.getHeader("Authorization");     
    if(StringUtils.isEmpty(authorization)){      
       requestContext.setSendZuulResponse(false);// 拒绝访问      
    requestContext.setResponseStatusCode(200);// 设置响应状态码               ResponseResult unauthenticated = new ResponseResult(CommonCode.UNAUTHENTICATED);        
       String jsonString = JSON.toJSONString(unauthenticated);   
            requestContext.setResponseBody(jsonString);         
      requestContext.getResponse().setContentType("application/json;charset=UTF‐8");      
            return null;     
    }   
      return null;  
   }  
 }  

测试:
请求:http://localhost:50201/api/course/coursebase/get/4028e581617f945f01617f9dabc40000查询课程信息 1、Header中不设置Authorization
响应结果:

[AppleScript] 纯文本查看 复制代码
{  
    "code": 10001,     
 "message": "此操作需要登陆系统!",   
   "success": false 
 } 

2、Header中设置Authorization
成功响应课程信息。




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马