使用网关zuul过滤器登录鉴权

Posted programer-xinmu78

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用网关zuul过滤器登录鉴权相关的知识,希望对你有一定的参考价值。

使用网关zuul过滤器登录鉴权

????1、新建一个filter包

????????filte有很多种 pre、post。

????2、新建一个类LoginFilter,实现ZuulFilter,重写里面的四个方法(可以根据业务建很多个过滤器filter)

????????filterType/filterOrder/shouldFilter/run

????????1)、filterType返回过滤器类型,前置类型为return PRE_TYPe,引入类FilterConstants,在类中可以看到各类filter定义

????????有以下几种

???????? public static final String ERROR_TYPE = "error";

????????????public static final String POST_TYPE = "post";

????????????public static final String PRE_TYPE = "pre";

????????????public static final String ROUTE_TYPE = "route";

????????????public static final String FORWARD_LOCATION_PREFIX = "forward:";

????????2)、在filterOrder中return 4,要解码后,PRE_DECORATION_FILTER_ORDER之前。order越小越优先执行

????????3)、shouldFilter为过滤器是否生效,确认URI为save方法则需要运行拦截(登录鉴权),如果不是则不拦截

???????????? RequestContext requestContext= RequestContext.getCurrentContext();

????????????????HttpServletRequest httpServletRequest=requestContext.getRequest();

????????????????System.out.println(httpServletRequest.getRequestURI());///apigateway/order/api/v1/orderfeignhystrix/save

????????????????System.out.println(httpServletRequest.getRequestURL());//http://192.168.136.128:9000/apigateway/order/api/v1/orderfeignhystrix/save

?

????????????????if ("/apigateway/order/api/v1/orderfeignhystrix/save".equalsIgnoreCase(httpServletRequest.getRequestURI())) //小的项目可以按照一个一个编写,如果大的项目会使用ACL控制

????????????????{

????????????????????return true;

????????????????}

????????????????return false;

????????4)、run为过滤的方法,通过token来确认是否登录,如果没有token则提示拦截了,并反馈未认证401

???????????? System.out.println("l拦截了!");

//JWT

RequestContext requestContext=RequestContext.getCurrentContext();

HttpServletRequest request=requestContext.getRequest();

//token对象

String token=request.getHeader("token");

if (StringUtils.isBlank(token))

{

token=request.getParameter("token");

}

if (StringUtils.isBlank(token))

{

requestContext.setSendZuulResponse(false);

requestContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);

}

return null;

????????????

????????????看下JWT和token技术

????????????

????3、在类顶部加注解,@Component,让Spring扫描

????4、测试

????http://192.168.136.128:9000/apigateway/order/api/v1/orderfeignhystrix/save?userId=2&productId=2&token=333,可以访问

????http://192.168.136.128:9000/apigateway/order/api/v1/orderfeignhystrix/save?userId=2&productId=2访问不了

以上是关于使用网关zuul过滤器登录鉴权的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud服务网关Zuul分析①分发

Spring Cloud - Zuul添加过滤器

使用Zuul过滤器实现登录验证

springCloud学习05之api网关服务zuul过滤器filter

微服务——统一网关

微服务——统一网关