Java的新项目学成在线笔记-day17(十二)

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] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

@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] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

}   

   @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] 纯文本查看 复制代码

?

1

2

3

4

5

{ 

    "code": 10001,    

 "message": "此操作需要登陆系统!",  

   "success": false

 }


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值