zoukankan      html  css  js  c++  java
  • Spring cloud微服务安全实战-6-7jwt改造总结

    限流的改造。





    同样注意,不要声明成Spring的Bean
    在上面声明Rateliiter

    如果能获取到权限继续往下走,没权限就返回,to many request的错误信息。

    加到过滤器链上


    加载Spring Scurity过滤器链的第一个过滤器之前。

    启动网关,测试


    复制获取到的令牌。





    先走的限流,然后是认证的filter,认证的filter是spring secutiry写的



    最终回到日志的过滤器,把日志更新掉。

    梳理

    左边本质上都是过滤器,虽然最后一个不是叫做什么什么filter。右边都是自己写的一些组件。组件的作用是改变过滤器的行为。
    在过滤器链上,绿色是我们自己写的,蓝色是Spring Security提供的,自己写的组件注入到Spring的过滤器里面,来改变或者是增强Spring 自己的过滤器里面的行为。

    1.限流
    2.从jwt或者其他的这些令牌里面,把当前的用户 身份提取出来
    3。审计日志
    4.从名字看是异常的转换过滤器。本身并没有任何业务逻辑。他的作用就是catch后面这个Interceptor抛出的来的异常,
    5.作用就是判断权限,我们写的permissonSerice最终就是在这里生效的。

    一个请求过来,他会按照这个顺序,经过所有的过滤器。当然还有一些其他的过滤器,就是SpringSecurity过滤器链上的其他过滤器。这些和我们核心讲 的没关系,我们就把它忽略了。但是跟我讲的安全相关的,就是核心的几个安全相关的过滤器都列出来了。按照这个顺序,请求会传过过滤器。

    我们会把自己的权限的判断的逻辑放在PermissionService里面。然后把PermissionService给到一个表达式处理器WebSecurityExpressionHandler。
    表达式处理器给到我们的SecurityInterceptor


    最终我们写的表达式是交给WebSecurityExpressionHandler来处理,然后它又交给了PermissionService

    PermissionService里面我们又写了如果你没有带token,就是你当前是个匿名用户 我就会抛出异常,如果你是个可以认出来的合法用户,那么你有没有权限,也会有个逻辑来判断。如果你没有权限,这里就会抛出相应的错误。就是Exception

    抛出Exception会被ExceptionTranslationFilter捕获住,捕获住以后,会根据你抛出来的异常类型去调相应的处理器。在整个安全的里面一共就两种异常,一种是401一种是403

    41就交给了GatewayAuthenticationEntryPoint来处理。你的令牌有问题或者是你没传令牌。

    另一种是你的身份认证过了,但是当前这个请求你没权限,这是403交给GatewayAccessDeniedHandler来处理。

    这两个组件都是注到ExceptionTranslationFilter来进行相应的处理的


    同时GatewayAuthenticationEntryPoint也会被注到 OAuth2ClientAuthenticationProcessingFilter。有种情况是你的令牌传的不对,根本解析不了。

    这就是jwt改造后在网关上做的所有事情。以及它的整个逻辑。

    结束



     

  • 相关阅读:
    VBScript的参数引用
    异常处理规范
    测试感悟
    URL重写
    避免重复记录
    EJB 异常处理探试法
    EJB 异常处理的最佳做法(1)
    使用vbscript脚本调用web服务
    用Dom4j解析XML及中文问题
    lucene简介
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11985555.html
Copyright © 2011-2022 走看看