【網關原理】若依開源管理系統


若依開源管理系統采用Nacos作為配置中心,GateWay網關作為一項基本服務,也是注冊在Nacos中。

yml配置文件

網關:ruoyi-gateway-pro.yml

spring:
  redis:
    host: localhost
    port: 6379
    password: 
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true  #true:只能識別小寫 false:只能識別大寫
          enabled: true  #開啟服務注冊發現
      routes:
        # 認證中心
        - id: ruoyi-auth
          uri: lb://ruoyi-auth
          predicates:
            - Path=/auth/**
          filters:
            # 驗證碼處理
            - CacheRequestFilter
            - ValidateCodeFilter
            - StripPrefix=1
# 安全配置
security:
  # 驗證碼
  captcha:
    enabled: false
    type: math
  # 防止XSS攻擊
  xss:
    enabled: true
    excludeUrls:
      - /system/notice
  # 不校驗白名單
  ignore:
    whites:
      - /auth/logout
      - /auth/login
      - /auth/register
      - /*/v2/api-docs
      - /csrf

可以看到,在權限認證之前,經過了多道filter進行過濾:
CacheRequestFilterValidateCodeFilter

Property類

在這里插入圖片描述
@RefreshScope注解:該配置自動刷新(更改配置文件,即時生效)

@ConfigurationProperties注解:可以讀取配置文件中的信息,並把它映射為實體類。

上圖中的信息是把
在這里插入圖片描述
映射為CaptchaProperties實體類。

config類

CaptchaConfig(驗證碼Bean)

在這里插入圖片描述
@Bean(name = "captchaProducer")生成了一個驗證碼bean,名字是captchaProducer

如果只用@bean注解,未指定name屬性,那么生成的bean名稱是getKaptchaBean

  • 補充(生成bean規則)
    在這里插入圖片描述

GatewayConfig(網關限流配置)

在這里插入圖片描述
@Order是org.springframework.core.annotation核心包中的注解,其作用定義了Spring容器加載bean的順序。
Ordered.HIGHEST_PRECEDENCE:初始化最高優先級,即spring容器啟動時,優先初始化添加該注解的bean

RouterFunctionConfiguration(路由配置)

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
ValidateCodeHandler如何處理/code請求?

繼承HandlerFunction,覆寫其中的handle方法

代碼如下:

@Component
public class ValidateCodeHandler implements HandlerFunction<ServerResponse>{
    @Autowired
    private ValidateCodeService validateCodeService;

    @Override
    public Mono<ServerResponse> handle(ServerRequest serverRequest){
        AjaxResult ajax;
        try{
            ajax = validateCodeService.createCapcha();
        }catch (CaptchaException | IOException e){
            return Mono.error(e);
        }
        return ServerResponse.status(HttpStatus.OK).body(BodyInserters.fromValue(ajax));
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM