Spring cloud微服务安全实战-6-6jwt改造之日志及错误处理(2)
第一次请求失败了 打印出了403,第二次更新成功

现在只处理了403这种情况,还有一种情况就是401,就是当前用户需要做身份认证,你没有做身份认证。
401的处理
与403类似,也是在这里配置。EntryPoint入口点。

这个方法里面,我们要实现的接口是AuthenticationEntryPoint

不直接实现这个接口,而是继承一个父类。OAuth2AuthenticationEntryPoint



上面如果不配置。那么默认的实现就是OAuth2AuthenticationEntryPoint。它的默认实现就是返回一个401的错误码。然后返回一个和403类似的json

令牌随便加个1

这样就抛出401 的错误。

401的这段信息就是OAuth2AuthenticationEntryPoint来处理的

加上@Component声明称Spring的Bean

覆盖的方法commence

注入到配置类
重启网关测试

401的处理要比403复杂一些, 一会我们会看到一些场景。
首先是发过来的令牌是有问题的,在令牌的前面加了一个1

返回的结果就是401

我们在后台日志里可以看到 ,只有一行日志

这说明我的请求进入到认证的过滤器以后,因为令牌有问题所以认证的 那个过滤器 直接抛了异常。
异常抛给了AuthenticationEntryPoint。它来处理,就输出了一行日志。然后整个处理就结束掉了。然后返回了错误信息。

在这种情况下,实际上你的请求就没有经过日志的Filter,也就是这个GatewayAuditLogFilter。而是直接从认证 的过滤器,直接抛异常。然后就走掉了。 这是一种情况。

另外一种情况:不传令牌,直接访问

多发几次请求。多点击几次请求的按钮。返回的永远是401

后台的日志里,出现了两种情况
anonymousUser是一个匿名的用户。因为没有传任何的令牌,所以实际上是一个匿名的用户,因为没传令牌,认证的过滤器默认建了一个匿名的用户身份放在他的authentication里面了。仍然往下走,走过了日志的过滤器。也走到了权限的判断,但是用的身份是匿名用户的身份。50%的概率,这里判断成功了。 请求放过去就执行了update log to success

那么4-1是哪里来的呢,是订单的服务,是需要身份认证的,返回了401,是在网关阶段判断出了没有权限。于是返回了401

两种情况:1.请求匿名的被刚过去,后面的order的服务返回401. 2。是网关这里权限没过,返回了401
1.令牌有问题,2。没传令牌。权限之类被拦住
一种情况不过日志的过滤器。另一种是过日志的过滤器
分别处理两种情况
最开始是这么配置的,一定要身份认证通过后,才能访问我们的这些请求

经过改造我们用了permissionService

permissonService里面没有做是不是登陆了的判断。而是直接是一个随机数。

首先我们要把当前用户是不是登陆的判断加上。判断传进来的authentication就可以了
如果令牌是正确有效的,那么这里的authentication是一个oauth2的authentication,如果没带令牌,就是匿名的用户的情况,那么这里的authentication是一个匿名的authentication。所以这里只需要判断authentication的类型就看可以了。
所以这里判断如果当前的authentication是AnonymousAuthenticationToken匿名的 那么就抛出异常 必填的AccessToken的异常,

它的参数是当前服务的detials,这里直接传空就可以了


这个EntryPoint是用来处理401错误的。讲了401有两种情况。
1.是传的令牌有问题,无法解析,就直接从认证的过滤器里面抛异常,抛异常服务就断了,不往下走 了。

2.是没传令牌.以为anoymous的身份往下走。最后到PermissionService里面抛出一个AccessTokenRequiredException

所以这里的authException有两种情况。

一种是这里抛出的AccessTokenRequiredException。如果是这个exception,我认为你是没传令牌 ,如果不是这个异常,我就认为你传的令牌有问题

如果是这种异常,说明你没传令牌,而且你的请求是经过了日志服务器,日志服务器已经往数据库插入了一条记录了。所以这里就是更新log为401

如果不是这个,说明你的令牌本身是有问题的,这个时候不会过日志的Filter。所以这里就是add一个401的log。令牌有问题。
重启网关测试
收下令牌前面加个1

前台的相应是401

控制台的输出是 add一个401的log。表示这次传的令牌有问题。

令牌去掉再去访问

没带令牌的后台输出。没带令牌是可以经过认证的Filter的,是一个匿名的身份。进入到日志Filter里面去。

在oder服务里面判断权限有问题。

这就是整个日志的处理。
结束
Spring cloud微服务安全实战-6-6jwt改造之日志及错误处理(2)的更多相关文章
- 《Spring Cloud微服务 入门 实战与进阶》
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...
- Spring Cloud微服务安全实战_00_前言
一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介: 二.最终形成的架 ...
- Spring cloud微服务安全实战_汇总
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...
- Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器
上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...
- Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- Spring cloud微服务安全实战 最新完整教程
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...
- Spring cloud微服务安全实战-6-8sentinel限流实战
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
- Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. ord ...
随机推荐
- 大数据之路week07--day05 (一个基于Hadoop的数据仓库建模工具之一 HIve)
什么是Hive? 我来一个短而精悍的总结(面试常问) 1:hive是基于hadoop的数据仓库建模工具之一(后面还有TEZ,Spark). 2:hive可以使用类sql方言,对存储在hdfs上的数据进 ...
- Oracle 序号函数
Oracle提供的序号函数:以emp表为例:1: rownum 最简单的序号 但是在order by之前就确定值.select rownum,t.* from emp t order by ename ...
- Map的常用实现类及Entry的用法
public static void main(String[] args) { //map 键值对 json格式根据你的键名来获取对应的值 //特点 :无序.以键值对的形式添加元素,键不 ...
- HDP 大数据平台搭建
一.概述 Apache Ambari是一个基于Web的支持Apache Hadoop集群的供应.管理和监控的开源工具,Ambari已支持大多数Hadoop组件,包括HDFS.MapReduce.Hiv ...
- linux学习6 Linux系统组成及初始
一.linux发行版回顾 1.版本回顾 2.Linux基础 a.CPU架构 32位CPU: X86 64位CPU:X64因为最早的X64位CPU是amd公司生产的所以也叫 amd64(可以兼容X86) ...
- I9300 国行联通定制修复手记
同事拿来个I9300给我修,说是打不了电话,试了一下,打电话的时候会提示“网络未注册”,于是果断找了个国行的4.1.2五件套刷砖.5分钟后,刷机成功,开机拨号,依旧是这个问题,怎么回事呢?上百度一查, ...
- 内核中通过进程PID获取进程的全部路径
目录 一丶简介 二丶原理 1.原理 2.代码实现. 一丶简介 我们遇到的Dos路径.如果想转化为NT路径(也就是 C:\xxxx)类似的格式 需要自己实现. 具体原理如下: 二丶原理 1.原理 1.使 ...
- 2019.11.11 模拟赛 T2 乘积求和
昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...
- P5025 [SNOI2017]炸弹
原题链接 https://www.luogu.org/problem/P5025 闲话时刻: 第一道 AC 的黑题,虽然众人皆说水... 其实思路不是很难,代码也不是很难打,是一些我们已经学过的东西 ...
- html转图片/html2canvas的使用/星座测试/类似于损友圈的活动
https://try.fishqc.com/Activity/constellation ---成品 电脑上录的gif 有借鉴的链接,很多,下面这个还不错~先别看,尊重下我先~~~~ https:/ ...