ruoyi-admin/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/application-druid.yml.example | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/application.yml.example | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/logback.xml.example | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-admin/pom.xml
@@ -16,7 +16,12 @@ </description> <dependencies> <!-- ruoyi-springboot2 / swagger knife4j é ç½® --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId> <version>4.4.0</version> </dependency> <!-- spring-boot-devtools --> <dependency> <groupId>org.springframework.boot</groupId> ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
@@ -1,64 +1,157 @@ package com.ruoyi.web.core.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.ruoyi.common.config.RuoYiConfig; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.security.SecurityScheme.In; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; import org.springdoc.core.customizers.ServerBaseUrlCustomizer; import org.springdoc.core.models.GroupedOpenApi; import org.springdoc.core.properties.SpringDocConfigProperties; import org.springdoc.core.providers.JavadocProvider; import org.springdoc.core.service.OpenAPIService; import org.springdoc.core.service.SecurityService; import org.springdoc.core.utils.PropertyResolverUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpHeaders; /** * Swagger2çæ¥å£é ç½® * * @author ruoyi * Swagger èªå¨é 置类ï¼åºäº OpenAPI + Springdoc å®ç°ã * * åæ æç¤ºï¼ * 1. Springdoc ææ¡£å°åï¼<a href="https://github.com/springdoc/springdoc-openapi">ä»åº</a> * 2. Swagger è§èï¼äº 2015 æ´å为 OpenAPI è§èï¼æ¬è´¨æ¯ä¸ä¸ªä¸è¥¿ * */ // @AutoConfiguration @Configuration @ConditionalOnClass({OpenAPI.class}) @EnableConfigurationProperties(SwaggerProperties.class) @ConditionalOnProperty(prefix = "springdoc.api-docs", name = "enabled", havingValue = "true", matchIfMissing = true) // 设置为 false æ¶ï¼ç¦ç¨ public class SwaggerConfig { /** ç³»ç»åºç¡é ç½® */ @Autowired private RuoYiConfig ruoyiConfig; /** * èªå®ä¹ç OpenAPI 对象 */ public static final String HEADER_TENANT_ID = "tenant-id"; // ========== å ¨å± OpenAPI é ç½® ========== @Bean public OpenAPI customOpenApi() { return new OpenAPI().components(new Components() // 设置认è¯ç请æ±å¤´ .addSecuritySchemes("apikey", securityScheme())) .addSecurityItem(new SecurityRequirement().addList("apikey")) .info(getApiInfo()); public OpenAPI createApi(SwaggerProperties properties) { Map<String, SecurityScheme> securitySchemas = buildSecuritySchemes(); OpenAPI openAPI = new OpenAPI() // æ¥å£ä¿¡æ¯ .info(buildInfo(properties)) // æ¥å£å®å ¨é ç½® .components(new Components().securitySchemes(securitySchemas)) .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)); securitySchemas.keySet().forEach(key -> openAPI.addSecurityItem(new SecurityRequirement().addList(key))); return openAPI; } @Bean public SecurityScheme securityScheme() { return new SecurityScheme() .type(SecurityScheme.Type.APIKEY) .name("Authorization") .in(SecurityScheme.In.HEADER) .scheme("Bearer"); } /** * æ·»å æè¦ä¿¡æ¯ * API æè¦ä¿¡æ¯ */ public Info getApiInfo() { private Info buildInfo(SwaggerProperties properties) { return new Info() // 设置æ é¢ .title("æ é¢ï¼è¥ä¾ç®¡çç³»ç»_æ¥å£ææ¡£") // æè¿° .description("æè¿°ï¼ç¨äºç®¡çé墿ä¸å ¬å¸ç人åä¿¡æ¯,å ·ä½å æ¬XXX,XXX模å...") // ä½è ä¿¡æ¯ .contact(new Contact().name(ruoyiConfig.getName())) // çæ¬ .version("çæ¬å·:" + ruoyiConfig.getVersion()); .title(properties.getTitle()) .description(properties.getDescription()) .version(properties.getVersion()) .contact(new Contact().name(properties.getAuthor()).url(properties.getUrl()).email(properties.getEmail())) .license(new License().name(properties.getLicense()).url(properties.getLicenseUrl())); } } /** * å®å ¨æ¨¡å¼ï¼è¿éé ç½®éè¿è¯·æ±å¤´ Authorization ä¼ é token åæ° */ private Map<String, SecurityScheme> buildSecuritySchemes() { Map<String, SecurityScheme> securitySchemes = new HashMap<>(); SecurityScheme securityScheme = new SecurityScheme() .type(SecurityScheme.Type.APIKEY) // ç±»å .name(HttpHeaders.AUTHORIZATION) // 请æ±å¤´ç name .in(SecurityScheme.In.HEADER); // token æå¨ä½ç½® securitySchemes.put(HttpHeaders.AUTHORIZATION, securityScheme); return securitySchemes; } /** * èªå®ä¹ OpenAPI å¤çå¨ */ @Bean public OpenAPIService openApiBuilder(Optional<OpenAPI> openAPI, SecurityService securityParser, SpringDocConfigProperties springDocConfigProperties, PropertyResolverUtils propertyResolverUtils, Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomizers, Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomizers, Optional<JavadocProvider> javadocProvider) { return new OpenAPIService(openAPI, securityParser, springDocConfigProperties, propertyResolverUtils, openApiBuilderCustomizers, serverBaseUrlCustomizers, javadocProvider); } // ========== åç» OpenAPI é ç½® ========== /** * æææ¨¡åç API åç» */ @Bean public GroupedOpenApi allGroupedOpenApi() { return buildGroupedOpenApi("all", ""); } public static GroupedOpenApi buildGroupedOpenApi(String group) { return buildGroupedOpenApi(group, group); } public static GroupedOpenApi buildGroupedOpenApi(String group, String path) { return GroupedOpenApi.builder() .group(group) .pathsToMatch("/admin-api/" + path + "/**", "/app-api/" + path + "/**", "/**") .addOperationCustomizer((operation, handlerMethod) -> operation // .addParametersItem(buildTenantHeaderParameter()) .addParametersItem(buildSecurityHeaderParameter())) .build(); } /** * æå»º Authorization 认è¯è¯·æ±å¤´åæ° * * è§£å³ Knife4j <a href="https://gitee.com/xiaoym/knife4j/issues/I69QBU">Authorize æªçæï¼è¯·æ±headeréæªå å«åæ°</a> * * @return 认è¯åæ° */ private static Parameter buildSecurityHeaderParameter() { return new Parameter() .name(HttpHeaders.AUTHORIZATION) // header å .description("è®¤è¯ Token") // æè¿° .in(String.valueOf(SecurityScheme.In.HEADER)) // è¯·æ± header .schema(new StringSchema()._default("Bearer test1").name(HEADER_TENANT_ID).description("è®¤è¯ Token")); // é»è®¤ï¼ä½¿ç¨ç¨æ·ç¼å·ä¸º 1 } /** * æå»º Tenant ç§æ·ç¼å·è¯·æ±å¤´åæ° * @return å¤ç§æ·åæ° */ /* private static Parameter buildTenantHeaderParameter() { return new Parameter() .name(HEADER_TENANT_ID) // header å .description("ç§æ·ç¼å·") // æè¿° .in(String.valueOf(SecurityScheme.In.HEADER)) // è¯·æ± header .schema(new IntegerSchema()._default(1L).name(HEADER_TENANT_ID).description("ç§æ·ç¼å·")); // é»è®¤ï¼ä½¿ç¨ç§æ·ç¼å·ä¸º 1 } */ } ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerProperties.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,63 @@ package com.ruoyi.web.core.config; import jakarta.validation.constraints.NotEmpty; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author :yys * @date : 2025/8/22 9:16 */ /** * Swagger é ç½®å±æ§*/ @ConfigurationProperties("aixin.swagger") @Data public class SwaggerProperties { /** * æ é¢ */ @NotEmpty(message = "æ é¢ä¸è½ä¸ºç©º") private String title; /** * æè¿° */ @NotEmpty(message = "æè¿°ä¸è½ä¸ºç©º") private String description; /** * ä½è */ @NotEmpty(message = "ä½è ä¸è½ä¸ºç©º") private String author; /** * çæ¬ */ @NotEmpty(message = "çæ¬ä¸è½ä¸ºç©º") private String version; /** * url */ @NotEmpty(message = "æ«æç package ä¸è½ä¸ºç©º") private String url; /** */ @NotEmpty(message = "æ«æç email ä¸è½ä¸ºç©º") private String email; /** * license */ @NotEmpty(message = "æ«æç license ä¸è½ä¸ºç©º") private String license; /** * license-url */ @NotEmpty(message = "æ«æç license-url ä¸è½ä¸ºç©º") private String licenseUrl; } ruoyi-admin/src/main/resources/application-druid.yml.example
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,110 @@ # æ°æ®æºé ç½® spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # driverClassName: com.mysql.cj.jdbc.Driver # mysqlé©±å¨ driverClassName: org.postgresql.Driver druid: # ä¸»åºæ°æ®æº master: # mysql # url: jdbc:mysql://124.220.0.228:3300/ruoyi-java?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # pg # url: jdbc:postgresql://localhost:5433/ruoyi-zd url: jdbc:postgresql://114.132.189.42:5432/zd_production-demo username: postgres password: bYD#nM+-BiLb # ä»åºæ°æ®æº slave: # 仿°æ®æºå¼å ³/é»è®¤å ³é enabled: false url: username: password: # åå§è¿æ¥æ° initialSize: 5 # æå°è¿æ¥æ± æ°é minIdle: 10 # æå¤§è¿æ¥æ± æ°é maxActive: 20 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 60000 # é ç½®è¿æ¥è¶ æ¶æ¶é´ connectTimeout: 30000 # é ç½®ç½ç»è¶ æ¶æ¶é´ socketTimeout: 60000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ minEvictableIdleTimeMillis: 300000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿大çåçæ¶é´ï¼å使¯æ¯«ç§ maxEvictableIdleTimeMillis: 900000 # é ç½®æ£æµè¿æ¥æ¯å¦ææ validationQuery: SELECT VERSION() testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置ç½ååï¼ä¸å¡«åå 许ææè®¿é® allow: url-pattern: /druid/* # æ§å¶å°ç®¡çç¨æ·ååå¯ç login-username: ruoyi login-password: 123456 filter: stat: enabled: true # æ ¢SQLè®°å½ log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true data: # redis é ç½® redis: # å°å host: 127.0.0.1 # 端å£ï¼é»è®¤ä¸º6379 port: 6379 # æ°æ®åºç´¢å¼ database: 0 # å¯ç # password: root2022! # password: 123456 password: # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s lettuce: pool: # è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥ min-idle: 0 # è¿æ¥æ± ä¸çæå¤§ç©ºé²è¿æ¥ max-idle: 8 # è¿æ¥æ± çæå¤§æ°æ®åºè¿æ¥æ° max-active: 8 # #è¿æ¥æ± æå¤§é»å¡çå¾ æ¶é´ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ max-wait: -1ms # å ¬å¸æå¡å¨ minio minio: # endpoint: http://114.132.189.42/ # port: 7019 # secure: false # accessKey: admin # secretKey: 12345678 # preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ # default-bucket: ruoyi-zd # é»è®¤å卿¡¶ endpoint: 127.0.0.1 port: 9002 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ default-bucket: ruoyi-zd # é»è®¤å卿¡¶ ruoyi-admin/src/main/resources/application.yml.example
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,140 @@ # 项ç®ç¸å ³é ç½® ruoyi: # åç§° name: RuoYi # çæ¬ version: 3.8.9 # çæå¹´ä»½ copyrightYear: 2025 # æä»¶è·¯å¾ 示ä¾ï¼ Windowsé ç½®D:/ruoyi/uploadPathï¼Linuxé ç½® /home/ruoyi/uploadPathï¼ profile: D:/Backup/æ¡é¢/download # è·åipå°åå¼å ³ addressEnabled: false # éªè¯ç ç±»å math æ°åè®¡ç® char å符éªè¯ captchaType: math # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 port: 7016 servlet: # åºç¨ç访é®è·¯å¾ context-path: / tomcat: # tomcatçURIç¼ç uri-encoding: UTF-8 # è¿æ¥æ°æ»¡åçæéæ°ï¼é»è®¤ä¸º100 accept-count: 1000 threads: # tomcatæå¤§çº¿ç¨æ°ï¼é»è®¤ä¸º200 max: 800 # Tomcatå¯å¨åå§åççº¿ç¨æ°ï¼é»è®¤å¼10 min-spare: 100 # æ¥å¿é ç½® logging: level: com.ruoyi: debug org.springframework: warn # ç¨æ·é ç½® user: password: # å¯ç æå¤§éè¯¯æ¬¡æ° maxRetryCount: 10 # å¯ç é宿¶é´ï¼é»è®¤10åéï¼ lockTime: 1 # Springé ç½® spring: # èµæºä¿¡æ¯ messages: # å½é åèµæºæä»¶è·¯å¾ basename: i18n/messages profiles: active: druid # æä»¶ä¸ä¼ servlet: multipart: # å个æä»¶å¤§å° max-file-size: 10MB # 设置æ»ä¸ä¼ çæä»¶å¤§å° max-request-size: 20MB # æå¡æ¨¡å devtools: restart: # çé¨ç½²å¼å ³ enabled: false flyway: enabled: false baseline-on-migrate: true baseline-version: 20230720000000 clean-disabled: true out-of-order: true #æå®sqlæä»¶è·¯å¾ locations: - classpath:db/migration/postgresql # tokené ç½® token: # 令çèªå®ä¹æ è¯ header: Authorization # 令çå¯é¥ secret: abcdefghijklmnopqrstuvwxyz # ä»¤çæææï¼é»è®¤30åéï¼ expireTime: 450 # MyBatis Plusé ç½® mybatis-plus: # æç´¢æå®å å«å typeAliasesPackage: com.ruoyi.**.domain # é ç½®mapperçæ«æï¼æ¾å°ææçmapper.xmlæ å°æä»¶ mapperLocations: classpath*:mapper/**/*Mapper.xml # å è½½å ¨å±çé ç½®æä»¶ configLocation: classpath:mybatis/mybatis-config.xml # PageHelperå页æä»¶ pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql knife4j: enable: true setting: language: zh_cn aixin: swagger: title: fkå¼åå¹³å° description: æä¾ç®¡çåå°ãç¨æ· App çææåè½ version: ${ruoyi.version} url: xxxx email: qq.com license: xxx license-url: xxx # Springdocé ç½® springdoc: api-docs: enabled: true path: /v3/api-docs swagger-ui: enabled: true path: /swagger-ui.html tags-sorter: alpha group-configs: - group: 'default' display-name: 'æµè¯æ¨¡å' paths-to-match: '/**' packages-to-scan: com.ruoyi.web.controller.tool # 鲿¢XSSæ»å» xss: # è¿æ»¤å¼å ³ enabled: true # æé¤é¾æ¥ï¼å¤ä¸ªç¨éå·åéï¼ excludes: /system/notice # å¹é 龿¥ urlPatterns: /system/*,/monitor/*,/tool/* ruoyi-admin/src/main/resources/logback.xml.example
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,93 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- æ¥å¿åæ¾è·¯å¾ --> <property name="log.path" value="E:\logs" /> <!-- æ¥å¿è¾åºæ ¼å¼ --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <!-- æ§å¶å°è¾åº --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- ç³»ç»æ¥å¿è¾åº --> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-info.log</file> <!-- å¾ªç¯æ¿çï¼åºäºæ¶é´å建æ¥å¿æä»¶ --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- æ¥å¿æä»¶åæ ¼å¼ --> <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- æ¥å¿æå¤§çåå² 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- è¿æ»¤ççº§å« --> <level>INFO</level> <!-- å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼ --> <onMatch>ACCEPT</onMatch> <!-- ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼ --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-error.log</file> <!-- å¾ªç¯æ¿çï¼åºäºæ¶é´å建æ¥å¿æä»¶ --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- æ¥å¿æä»¶åæ ¼å¼ --> <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- æ¥å¿æå¤§çåå² 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- è¿æ»¤ççº§å« --> <level>ERROR</level> <!-- å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼ --> <onMatch>ACCEPT</onMatch> <!-- ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼ --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- ç¨æ·è®¿é®æ¥å¿è¾åº --> <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sys-user.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- æå¤©åæ» daily --> <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- æ¥å¿æå¤§çåå² 60天 --> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- ç³»ç»æ¨¡åæ¥å¿çº§å«æ§å¶ --> <logger name="com.ruoyi" level="info" /> <!-- Springæ¥å¿çº§å«æ§å¶ --> <logger name="org.springframework" level="warn" /> <root level="info"> <appender-ref ref="console" /> </root> <!--ç³»ç»æä½æ¥å¿--> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> <!--ç³»ç»ç¨æ·æä½æ¥å¿--> <logger name="sys-user" level="info"> <appender-ref ref="sys-user"/> </logger> </configuration> ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
@@ -55,6 +55,7 @@ public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // è®¾ç½®è®¿é®æºå°å config.addAllowedOriginPattern("*"); // è®¾ç½®è®¿é®æºè¯·æ±å¤´ ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -114,7 +114,7 @@ requests.requestMatchers("/login", "/register", "/captchaImage").permitAll() // éæèµæºï¼å¯å¿åè®¿é® .requestMatchers(HttpMethod.GET, "/", "/*.html", "/**.html", "/**.css", "/**.js", "/profile/**").permitAll() .requestMatchers("/swagger-ui.html", "/v3/api-docs/**", "/swagger-ui/**", "/druid/**").permitAll() .requestMatchers("/swagger-ui.html", "/v3/api-docs/**", "/swagger-ui/**","/swagger-resources", "/druid/**","/swagger-resources","/webjars/**", "/favicon.ico", "/doc.html").permitAll() // é¤ä¸é¢å¤çææè¯·æ±å ¨é¨éè¦é´æè®¤è¯ .anyRequest().authenticated(); })