mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	多模块重构 2:在 yudao-admin-server 中,引入 yudao-module-member 模块
This commit is contained in:
		| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.framework.apilog.core.filter; | ||||
|  | ||||
| import cn.hutool.core.exceptions.ExceptionUtil; | ||||
| import cn.hutool.core.map.MapUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.hutool.extra.servlet.ServletUtil; | ||||
| import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| @@ -25,6 +26,8 @@ import java.io.IOException; | ||||
| import java.util.Date; | ||||
| import java.util.Map; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.*; | ||||
|  | ||||
| /** | ||||
|  * API 访问日志 Filter | ||||
|  * | ||||
| @@ -42,7 +45,8 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | ||||
|     @Override | ||||
|     protected boolean shouldNotFilter(HttpServletRequest request) { | ||||
|         // 只过滤 API 请求的地址 | ||||
|         return !request.getRequestURI().startsWith(webProperties.getApiPrefix()); | ||||
|         return !StrUtil.startWithAny(request.getRequestURI(), webProperties.getAppApi().getPrefix(), | ||||
|                 webProperties.getAppApi().getPrefix()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -73,7 +77,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | ||||
|             this.buildApiAccessLogDTO(accessLog, request, beginTime, queryString, requestBody, ex); | ||||
|             apiAccessLogFrameworkService.createApiAccessLogAsync(accessLog); | ||||
|         } catch (Throwable th) { | ||||
|             log.error("[createApiAccessLog][url({}) log({}) 发生异常]", request.getRequestURI(), JsonUtils.toJsonString(accessLog), th); | ||||
|             log.error("[createApiAccessLog][url({}) log({}) 发生异常]", request.getRequestURI(), toJsonString(accessLog), th); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -99,7 +103,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter { | ||||
|         accessLog.setApplicationName(applicationName); | ||||
|         accessLog.setRequestUrl(request.getRequestURI()); | ||||
|         Map<String, Object> requestParams = MapUtil.<String, Object>builder().put("query", queryString).put("body", requestBody).build(); | ||||
|         accessLog.setRequestParams(JsonUtils.toJsonString(requestParams)); | ||||
|         accessLog.setRequestParams(toJsonString(requestParams)); | ||||
|         accessLog.setRequestMethod(request.getMethod()); | ||||
|         accessLog.setUserAgent(ServletUtils.getUserAgent(request)); | ||||
|         accessLog.setUserIp(ServletUtil.getClientIP(request)); | ||||
|   | ||||
| @@ -5,6 +5,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
| import javax.validation.constraints.NotEmpty; | ||||
| import javax.validation.constraints.NotNull; | ||||
|  | ||||
| @ConfigurationProperties(prefix = "yudao.web") | ||||
| @@ -12,26 +14,37 @@ import javax.validation.constraints.NotNull; | ||||
| @Data | ||||
| public class WebProperties { | ||||
|  | ||||
|     /** | ||||
|      * API 前缀,实现所有 Controller 提供的 RESTFul API 的统一前缀 | ||||
|      * | ||||
|      * | ||||
|      * 意义:通过该前缀,避免 Swagger、Actuator 意外通过 Nginx 暴露出来给外部,带来安全性问题 | ||||
|      *      这样,Nginx 只需要配置转发到 /api/* 的所有接口即可。 | ||||
|      * | ||||
|      * @see YudaoWebAutoConfiguration#configurePathMatch(PathMatchConfigurer) | ||||
|      */ | ||||
|     @NotNull(message = "API 前缀不能为空") | ||||
|     private String apiPrefix; | ||||
|     @NotNull(message = "APP API 不能为空") | ||||
|     private Api appApi; | ||||
|     @NotNull(message = "Admin API 不能为空") | ||||
|     private Api adminApi; | ||||
|  | ||||
|     /** | ||||
|      * Controller 所在包 | ||||
|      * | ||||
|      * 主要目的是,给该 Controller 设置指定的 {@link #apiPrefix} | ||||
|      * | ||||
|      * 因为我们有多个 modules 包里会包含 Controller,所以只需要写到 cn.iocoder.yudao 这样的层级 | ||||
|      */ | ||||
|     @NotNull(message = "Controller 所在包不能为空") | ||||
|     private String controllerPackage; | ||||
|     @Data | ||||
|     @Valid | ||||
|     public static class Api { | ||||
|  | ||||
|         /** | ||||
|          * API 前缀,实现所有 Controller 提供的 RESTFul API 的统一前缀 | ||||
|          * | ||||
|          * | ||||
|          * 意义:通过该前缀,避免 Swagger、Actuator 意外通过 Nginx 暴露出来给外部,带来安全性问题 | ||||
|          *      这样,Nginx 只需要配置转发到 /api/* 的所有接口即可。 | ||||
|          * | ||||
|          * @see YudaoWebAutoConfiguration#configurePathMatch(PathMatchConfigurer) | ||||
|          */ | ||||
|         @NotEmpty(message = "API 前缀不能为空") | ||||
|         private String prefix; | ||||
|  | ||||
|         /** | ||||
|          * Controller 所在包 | ||||
|          * | ||||
|          * 主要目的是,给该 Controller 设置指定的 {@link #prefix} | ||||
|          * | ||||
|          * 因为我们有多个 modules 包里会包含 Controller,所以只需要写到 cn.iocoder.yudao 这样的层级 | ||||
|          */ | ||||
|         @NotEmpty(message = "Controller 所在包不能为空") | ||||
|         private String controller; | ||||
|  | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -38,10 +38,19 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { | ||||
|  | ||||
|     @Override | ||||
|     public void configurePathMatch(PathMatchConfigurer configurer) { | ||||
|         // 设置 API 前缀,仅仅匹配 controller 包下的 | ||||
|         configurer.addPathPrefix(webProperties.getApiPrefix(), clazz -> | ||||
|                 clazz.isAnnotationPresent(RestController.class) | ||||
|                 && clazz.getPackage().getName().startsWith(webProperties.getControllerPackage())); // 仅仅匹配 controller 包 | ||||
|         configurePathMatch(configurer, webProperties.getAdminApi()); | ||||
|         configurePathMatch(configurer, webProperties.getAppApi()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 设置 API 前缀,仅仅匹配 controller 包下的 | ||||
|      * | ||||
|      * @param configurer 配置 | ||||
|      * @param api API 配置 | ||||
|      */ | ||||
|     private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) { | ||||
|         configurer.addPathPrefix(api.getPrefix(), clazz -> clazz.isAnnotationPresent(RestController.class) | ||||
|                 && clazz.getPackage().getName().startsWith(api.getController())); // 仅仅匹配 controller 包 | ||||
|     } | ||||
|  | ||||
|     @Bean | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV