使用网关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访问不了

原文地址:https://www.cnblogs.com/programer-xinmu78/p/10548389.html

时间: 2024-08-29 05:09:49

使用网关zuul过滤器登录鉴权的相关文章

Spring Cloud(七):服务网关zuul过滤器

上文介绍了Zuul的基本使用与路由功能,本文接着介绍Zuul的核心概念 -- Zuul过滤器(filter). Zuul的功能基本通过Zuul过滤器来实现(类比于Struts的拦截器,只是Struts拦截器用到责任链模式,Zuul则是通过FilterProcessor来控制执行),在不同的阶段,通过不同类型的过滤器来实现相应的功能. Zuul过滤器 过滤器类型 zuul的过滤器根据对HTTP请求的不同处理阶段包括如下四种类型 pre :在请求转发到后端目标服务之前执行,一般用于请求认证.确定路由

网关zuul——过滤器

网关——过滤器 从网关组件请求流程分析,可以看出网关的核心类为ZuulServlet,所有的请求都是走到这里来处理的! public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { try { this.init((HttpServletRequest)servletRequest, (HttpServletRes

Spring Cloud(十一):服务网关 Zuul(过滤器)【Finchley 版】

Spring Cloud(十一):服务网关 Zuul(过滤器)[Finchley 版] 发表于 2018-04-23 |  更新于 2018-05-07 | 在上篇文章中我们了解了 Spring Cloud Zuul 作为网关所具备的最基本功能:路由(Router).本文我们将关注 Spring Cloud Zuul 的另一核心功能:过滤器(Filter). Filter 的作用 我们已经能够实现请求的路由功能,所以我们的微服务应用提供的接口就可以通过统一的 API 网关入口被客户端访问到了.但

物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权

0. 前言 结合前面两篇博客,前面博客实现了Gateway网关的路由功能.此时,如果每个微服务都需要一套帐号认证体系就没有必要了.可以在网关处进行权限认证.然后转发请求到后端服务.这样后面的微服务就可以直接调用,而不需要每个都单独一套鉴权体系.参考了Oauth2和JWT,发现基于微服务,使用JWT会更方便一些,所以准备集成JWT作为微服务架构的认证方式. [https://www.cnblogs.com/wunaozai/p/12512753.html] 物联网架构成长之路(54)-基于Naco

api-gateway实践(7)鉴权场景和网关场景梳理、OAuth2待澄清问题列表

一.身份鉴权验证 1.业务请求 1.1.父元素声明了 "/GroupA/VersionB/*",子元素声明了 "/GroupA/VersionB/Cxxx",access="ROLE_XXXX" 身份识别: 有效token 无token.无效token   权限鉴别: 有权限: 无权限: 1.2.父元素声明了 "/GroupA/VersionB/*",子元素没有声明的 "/GroupA/VersionB/Dxxx&q

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

Zuul网关同时管理各服务的api的访问权限,没登陆则不能调用某些接口: 使用Zuul过滤器实现: 步骤: 1.新建一个filter包 2.新建一个类,继承ZuulFilter类,在类顶部加注解@Component, 让Spring扫描 3.重写里面的4个方法,参考如下: package net.xdclass.apigataway.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Reques

无线端安全登录与鉴权一之Kerberos

无线端登录与鉴权是安全登录以及保证用户数据安全的第一步,也是最重要的一步.之前做过一个安全登录与鉴权的方案,借这个机会,系统的思考一下,与大家交流交流 先介绍一下TX系统使用的Kerberos方案,参考了 http://blog.csdn.net/wulantian/article/details/42418231 的文章 一.概念介绍 Kerberos:起源于希腊神话,是一支守护着冥界长着3个头颅的神犬,在keberos Authentication中,Kerberos的3个头颅代表中认证过程

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关的过滤器Filter以及异常处理的教程. SpringCloud Zuul Filter 介绍 过滤器概述 Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列操作. 以下是Zuul过滤器的主要特征: 类型:通常在应用过滤器时在路由流程中定义阶段(尽管它可以是任何自定义字

网关鉴权后下游统一filter获取用户信息

1. 场景描述 最近有点忙,在弄微服务nacos+springcloud gateway这块工作,以前只是简单应用,这次因为要对接10几个系统或者平台,还的鉴权,等后续稍微闲点了,把这块东西总结下. 刚好要写个文档,就一起发出来,场景是其他系统,gateway中鉴权成功后(过来的是加密token),会将个人信息信息会写到header中,比如手机号.姓名.部门等,为了方便下游系统获取信息,让写一个统一的filter,下游只需注入这个filter就能拿到用户信息,避免大家都的反复解析,还容易出错.