使用网关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过滤器登录鉴权的主要内容,如果未能解决你的问题,请参考以下文章