diff --git a/docs/nacos/DEFAULT_GROUP.zip b/docs/nacos/DEFAULT_GROUP.zip index 68211b613..c8b608e95 100644 Binary files a/docs/nacos/DEFAULT_GROUP.zip and b/docs/nacos/DEFAULT_GROUP.zip differ diff --git a/youlai-admin/admin-boot/src/main/resources/bootstrap-dev.yml b/youlai-admin/admin-boot/src/main/resources/bootstrap-dev.yml index 6e64965d4..153c5eb17 100644 --- a/youlai-admin/admin-boot/src/main/resources/bootstrap-dev.yml +++ b/youlai-admin/admin-boot/src/main/resources/bootstrap-dev.yml @@ -11,26 +11,3 @@ spring: config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml - sentinel: - enabled: true - eager: true # 取消控制台懒加载,项目启动即连接Sentinel - transport: - client-ip: localhost - dashboard: localhost:8080 - datasource: - # 限流规则,flow为key,随便定义 - flow: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-flow-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: flow - # 降级规则 - degrade: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-degrade-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: degrade diff --git a/youlai-auth/src/main/java/com/youlai/auth/controller/OAuthController.java b/youlai-auth/src/main/java/com/youlai/auth/controller/OAuthController.java index 6f54d1038..c4a9ccff0 100644 --- a/youlai-auth/src/main/java/com/youlai/auth/controller/OAuthController.java +++ b/youlai-auth/src/main/java/com/youlai/auth/controller/OAuthController.java @@ -61,7 +61,7 @@ public class OAuthController { * 方式一:client_id、client_secret放在请求路径中(注:当前版本已废弃) * 方式二:放在请求头(Request Headers)中的Authorization字段,且经过加密,例如 Basic Y2xpZW50OnNlY3JldA== 明文等于 client:secret */ - String clientId = JwtUtils.getAuthClientId(); + String clientId = JwtUtils.getOAuthClientId(); OAuthClientEnum client = OAuthClientEnum.getByClientId(clientId); switch (client) { case TEST: // knife4j接口测试文档使用 client_id/client_secret : client/123456 diff --git a/youlai-auth/src/main/java/com/youlai/auth/security/config/AuthorizationServerConfig.java b/youlai-auth/src/main/java/com/youlai/auth/security/config/AuthorizationServerConfig.java index 12aa06cd8..b0d82d0b1 100644 --- a/youlai-auth/src/main/java/com/youlai/auth/security/config/AuthorizationServerConfig.java +++ b/youlai-auth/src/main/java/com/youlai/auth/security/config/AuthorizationServerConfig.java @@ -124,11 +124,9 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap /** * 密码编码器 - *

+ * * 委托方式,根据密码的前缀选择对应的encoder,例如:{bcypt}前缀->标识BCYPT算法加密;{noop}->标识不使用任何加密即明文的方式 * 密码判读 DaoAuthenticationProvider#additionalAuthenticationChecks - * - * @return */ @Bean public PasswordEncoder passwordEncoder() { diff --git a/youlai-auth/src/main/java/com/youlai/auth/security/service/UserDetailsServiceImpl.java b/youlai-auth/src/main/java/com/youlai/auth/security/service/UserDetailsServiceImpl.java index 3642c1051..588dd8dcb 100644 --- a/youlai-auth/src/main/java/com/youlai/auth/security/service/UserDetailsServiceImpl.java +++ b/youlai-auth/src/main/java/com/youlai/auth/security/service/UserDetailsServiceImpl.java @@ -34,7 +34,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - String clientId = JwtUtils.getAuthClientId(); + String clientId = JwtUtils.getOAuthClientId(); OAuthClientEnum client = OAuthClientEnum.getByClientId(clientId); Result result; diff --git a/youlai-auth/src/main/resources/bootstrap-dev.yml b/youlai-auth/src/main/resources/bootstrap-dev.yml index 78b27f212..4c0ab6f9c 100644 --- a/youlai-auth/src/main/resources/bootstrap-dev.yml +++ b/youlai-auth/src/main/resources/bootstrap-dev.yml @@ -9,38 +9,8 @@ spring: discovery: server-addr: http://localhost:8848 config: - # docker启动nacos-server需要配置 server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml group: DEFAULT_GROUP - sentinel: - enabled: true - eager: true # 取消控制台懒加载,项目启动即连接Sentinel - transport: - client-ip: localhost - dashboard: localhost:8080 - datasource: - # 降级规则 - degrade: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-degrade-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: degrade -# 开启feign对sentinel的支持 -feign: - sentinel: - enabled: true -# jwt 配置 -jwt: - config: - enabled: true - key-location: jwt.jks - key-alias: jwt - key-pass: 123456 - iss: youlai.tech - sub: all - access-exp-days: 30 \ No newline at end of file diff --git a/youlai-common/common-core/src/main/java/com/youlai/common/constant/AuthConstants.java b/youlai-common/common-core/src/main/java/com/youlai/common/constant/AuthConstants.java index a7b8fb165..22bfd21ce 100644 --- a/youlai-common/common-core/src/main/java/com/youlai/common/constant/AuthConstants.java +++ b/youlai-common/common-core/src/main/java/com/youlai/common/constant/AuthConstants.java @@ -2,7 +2,6 @@ package com.youlai.common.constant; public interface AuthConstants { - /** * 认证请求头key */ diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/util/JwtUtils.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/util/JwtUtils.java index c4bba4d66..dcc31ab7c 100644 --- a/youlai-common/common-web/src/main/java/com/youlai/common/web/util/JwtUtils.java +++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/util/JwtUtils.java @@ -10,26 +10,40 @@ import org.apache.logging.log4j.util.Strings; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import sun.misc.BASE64Decoder; - import javax.servlet.http.HttpServletRequest; +import java.net.URLDecoder; import java.util.List; -import java.util.stream.Collectors; +/** + * JWT工具类 + * + * @author xianrui + */ @Slf4j public class JwtUtils { + @SneakyThrows public static JSONObject getJwtPayload() { - String jwtPayload = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader(AuthConstants.JWT_PAYLOAD_KEY); - JSONObject jsonObject = JSONUtil.parseObj(jwtPayload); + String payload = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader(AuthConstants.JWT_PAYLOAD_KEY); + JSONObject jsonObject = JSONUtil.parseObj(URLDecoder.decode(payload,"UTF-8")); return jsonObject; } + /** + * 解析JWT获取用户ID + * + * @return + */ public static Long getUserId() { Long id = getJwtPayload().getLong(AuthConstants.USER_ID_KEY); return id; } - + /** + * 解析JWT获取获取用户名 + * + * @return + */ public static String getUsername() { String username = getJwtPayload().getStr(AuthConstants.USER_NAME_KEY); return username; @@ -37,7 +51,7 @@ public class JwtUtils { /** * 获取登录认证的客户端ID - *

+ * * 兼容两种方式获取Oauth2客户端信息(client_id、client_secret) * 方式一:client_id、client_secret放在请求路径中 * 方式二:放在请求头(Request Headers)中的Authorization字段,且经过加密,例如 Basic Y2xpZW50OnNlY3JldA== 明文等于 client:secret @@ -45,7 +59,7 @@ public class JwtUtils { * @return */ @SneakyThrows - public static String getAuthClientId() { + public static String getOAuthClientId() { String clientId; HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); @@ -66,15 +80,17 @@ public class JwtUtils { return clientId; } + /** + * JWT获取用户角色列表 + * + * @return 角色列表 + */ public static List getRoles() { + List roles = null; JSONObject payload = getJwtPayload(); - if (payload != null && payload.size() > 0) { - List list = payload.get(AuthConstants.JWT_AUTHORITIES_KEY, List.class); - List roles = list.stream().collect(Collectors.toList()); - return roles; + if (payload != null && payload.containsKey(AuthConstants.JWT_AUTHORITIES_KEY)) { + roles = payload.get(AuthConstants.JWT_AUTHORITIES_KEY, List.class); } - return null; + return roles; } - - } diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/component/RedisChannelListener.java b/youlai-gateway/src/main/java/com/youlai/gateway/component/RedisChannelListener.java index c9e9017bc..b21a19058 100644 --- a/youlai-gateway/src/main/java/com/youlai/gateway/component/RedisChannelListener.java +++ b/youlai-gateway/src/main/java/com/youlai/gateway/component/RedisChannelListener.java @@ -1,6 +1,5 @@ package com.youlai.gateway.component; -import cn.hutool.core.util.StrUtil; import com.youlai.common.constant.GlobalConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.Message; @@ -11,13 +10,13 @@ import java.nio.charset.StandardCharsets; public class RedisChannelListener implements MessageListener { @Autowired - private AdminRoleLocalCache adminRoleLocalCache; + private UrlPermRolesLocalCache urlPermRolesLocalCache; @Override public void onMessage(Message message, byte[] bytes) { String msg = new String(message.getBody(), StandardCharsets.UTF_8); String channel = new String(message.getChannel(), StandardCharsets.UTF_8); - adminRoleLocalCache.remove(GlobalConstants.URL_PERM_ROLES_KEY); + urlPermRolesLocalCache.remove(GlobalConstants.URL_PERM_ROLES_KEY); } } diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/component/AdminRoleLocalCache.java b/youlai-gateway/src/main/java/com/youlai/gateway/component/UrlPermRolesLocalCache.java similarity index 94% rename from youlai-gateway/src/main/java/com/youlai/gateway/component/AdminRoleLocalCache.java rename to youlai-gateway/src/main/java/com/youlai/gateway/component/UrlPermRolesLocalCache.java index 3724847f2..59a4e16b8 100644 --- a/youlai-gateway/src/main/java/com/youlai/gateway/component/AdminRoleLocalCache.java +++ b/youlai-gateway/src/main/java/com/youlai/gateway/component/UrlPermRolesLocalCache.java @@ -6,7 +6,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; -import java.util.Map; import java.util.concurrent.TimeUnit; /** @@ -17,7 +16,7 @@ import java.util.concurrent.TimeUnit; */ @Slf4j @Component -public class AdminRoleLocalCache { +public class UrlPermRolesLocalCache { private Cache localCache = null; @PostConstruct diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/security/ResourceServerManager.java b/youlai-gateway/src/main/java/com/youlai/gateway/security/ResourceServerManager.java index d31ab1214..cac44c2c2 100644 --- a/youlai-gateway/src/main/java/com/youlai/gateway/security/ResourceServerManager.java +++ b/youlai-gateway/src/main/java/com/youlai/gateway/security/ResourceServerManager.java @@ -3,13 +3,11 @@ package com.youlai.gateway.security; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSON; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import com.youlai.common.constant.AuthConstants; import com.youlai.common.constant.GlobalConstants; -import com.youlai.gateway.component.AdminRoleLocalCache; +import com.youlai.gateway.component.UrlPermRolesLocalCache; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; @@ -25,27 +23,29 @@ import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; /** * 网关自定义鉴权管理器 * - * @author haoxr - * @date 2020-05-01 + * @author xianrui */ @Component -@AllArgsConstructor +@RequiredArgsConstructor @Slf4j public class ResourceServerManager implements ReactiveAuthorizationManager { - private RedisTemplate redisTemplate; - private AdminRoleLocalCache adminRoleLocalCache; + private final RedisTemplate redisTemplate; + + // 本地缓存 + private final UrlPermRolesLocalCache urlPermRolesLocalCache; // 是否演示环境 - @Value("${demo}") - private Boolean isDemoEnv; + @Value("${local-cache.enabled}") + private Boolean localCacheEnabled; + @Override public Mono check(Mono mono, AuthorizationContext authorizationContext) { ServerHttpRequest request = authorizationContext.getExchange().getRequest(); @@ -53,66 +53,68 @@ public class ResourceServerManager implements ReactiveAuthorizationManager permRolesRules = (Map) adminRoleLocalCache.getCache(GlobalConstants.URL_PERM_ROLES_KEY); - if (isDemoEnv){ - // 缓存取【URL权限标识->角色集合】权限规则 - if(null==permRolesRules){ - permRolesRules = redisTemplate.opsForHash().entries(GlobalConstants.URL_PERM_ROLES_KEY); - adminRoleLocalCache.setLocalCache(GlobalConstants.URL_PERM_ROLES_KEY,permRolesRules); + // 缓存取 URL权限-角色集合 规则数据 + // urlPermRolesRules = [{'key':'GET:/api/v1/users/*','value':['ADMIN','TEST']},...] + Map urlPermRolesRules; + if (localCacheEnabled) { + urlPermRolesRules = (Map) urlPermRolesLocalCache.getCache(GlobalConstants.URL_PERM_ROLES_KEY); + if (null == urlPermRolesRules) { + urlPermRolesRules = redisTemplate.opsForHash().entries(GlobalConstants.URL_PERM_ROLES_KEY); + urlPermRolesLocalCache.setLocalCache(GlobalConstants.URL_PERM_ROLES_KEY, urlPermRolesRules); } + } else { + urlPermRolesRules = redisTemplate.opsForHash().entries(GlobalConstants.URL_PERM_ROLES_KEY); } - // 根据 “请求路径” 和 权限规则中的“URL权限标识”进行Ant匹配,得出拥有权限的角色集合 - Set hasPermissionRoles = CollectionUtil.newHashSet(); // 【声明定义】有权限的角色集合 - boolean needToCheck = false; // 【声明定义】是否需要被拦截检查的请求,如果缓存中权限规则中没有任何URL权限标识和此次请求的URL匹配,默认不需要被鉴权 - for (Map.Entry permRoles : permRolesRules.entrySet()) { - String perm = permRoles.getKey(); // 缓存权限规则的键:URL权限标识 + // 根据请求路径判断有访问权限的角色列表 + List authorizedRoles = new ArrayList<>(); // 拥有访问权限的角色 + boolean requireCheck = false; // 是否需要鉴权,默认“没有设置权限规则”不用鉴权 + + for (Map.Entry permRoles : urlPermRolesRules.entrySet()) { + String perm = permRoles.getKey(); if (pathMatcher.match(perm, restfulPath)) { - List roles = Convert.toList(String.class, permRoles.getValue()); // 缓存权限规则的值:有请求路径访问权限的角色集合 - hasPermissionRoles.addAll(Convert.toList(String.class, roles)); - if (needToCheck == false) { - needToCheck = true; + List roles = Convert.toList(String.class, permRoles.getValue()); + authorizedRoles.addAll(Convert.toList(String.class, roles)); + if (requireCheck == false) { + requireCheck = true; } } } - log.info("拥有接口访问权限的角色:{}", hasPermissionRoles.toString()); - // 没有设置权限规则放行;注:如果默认想拦截所有的请求请移除needToCheck变量逻辑即可,根据需求定制 - if (needToCheck == false) { + if (requireCheck == false) { return Mono.just(new AuthorizationDecision(true)); } - // 判断用户JWT中携带的角色是否有能通过权限拦截的角色 + // 判断JWT中携带的用户角色是否有权限访问 Mono authorizationDecisionMono = mono .filter(Authentication::isAuthenticated) .flatMapIterable(Authentication::getAuthorities) .map(GrantedAuthority::getAuthority) .any(authority -> { - log.info("用户权限 : {}", authority); // ROLE_ROOT - String role = authority.substring(AuthConstants.AUTHORITY_PREFIX.length()); // 角色编码:ROOT - if (GlobalConstants.ROOT_ROLE_CODE.equals(role)) { // 如果是超级管理员则放行 - return true; + String roleCode = authority.substring(AuthConstants.AUTHORITY_PREFIX.length()); // 用户的角色 + if (GlobalConstants.ROOT_ROLE_CODE.equals(roleCode)) { + return true; // 如果是超级管理员则放行 } - boolean hasPermission = CollectionUtil.isNotEmpty(hasPermissionRoles) && hasPermissionRoles.contains(role); // 用户角色中只要有一个满足则通过权限校验 - return hasPermission; + boolean hasAuthorized = CollectionUtil.isNotEmpty(authorizedRoles) && authorizedRoles.contains(roleCode); + return hasAuthorized; }) .map(AuthorizationDecision::new) .defaultIfEmpty(new AuthorizationDecision(false)); diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/security/SecurityGlobalFilter.java b/youlai-gateway/src/main/java/com/youlai/gateway/security/SecurityGlobalFilter.java index 953c3d4f6..357e75962 100644 --- a/youlai-gateway/src/main/java/com/youlai/gateway/security/SecurityGlobalFilter.java +++ b/youlai-gateway/src/main/java/com/youlai/gateway/security/SecurityGlobalFilter.java @@ -7,10 +7,10 @@ import com.nimbusds.jose.JWSObject; import com.youlai.common.constant.AuthConstants; import com.youlai.common.result.ResultCode; import com.youlai.gateway.util.ResponseUtils; +import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.util.Strings; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -23,22 +23,23 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import java.net.URLEncoder; + /** * 安全拦截全局过滤器 * - * @author haoxr - * @date 2020-06-12 + * @author xianrui */ @Component @Slf4j +@RequiredArgsConstructor public class SecurityGlobalFilter implements GlobalFilter, Ordered { - @Autowired - private RedisTemplate redisTemplate; + private final RedisTemplate redisTemplate; - // 是否演示环境 - @Value("${demo}") - private Boolean isDemoEnv; + + @Value("${spring.profiles.active}") + private String env; @SneakyThrows @Override @@ -47,8 +48,8 @@ public class SecurityGlobalFilter implements GlobalFilter, Ordered { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); - // 演示环境禁止删除和修改 - if (isDemoEnv + // 线上演示环境禁止修改和删除 + if (env.equals("prod") && (HttpMethod.DELETE.toString().equals(request.getMethodValue()) // 删除方法 || HttpMethod.PUT.toString().equals(request.getMethodValue())) // 修改方法 ) { @@ -74,7 +75,7 @@ public class SecurityGlobalFilter implements GlobalFilter, Ordered { // 存在token且不是黑名单,request写入JWT的载体信息 request = exchange.getRequest().mutate() - .header(AuthConstants.JWT_PAYLOAD_KEY, payload) + .header(AuthConstants.JWT_PAYLOAD_KEY, URLEncoder.encode(payload,"UTF-8")) .build(); exchange = exchange.mutate().request(request).build(); return chain.filter(exchange); diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHandler.java index 24099a7cd..1091eb1a4 100644 --- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHandler.java +++ b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHandler.java @@ -11,7 +11,7 @@ import springfox.documentation.swagger.web.*; import java.util.Optional; /** - * @Author haoxr + * @author xianrui * @Date 2021-02-25 16:34 * @Version 1.0.0 * @ https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/blob/master/knife4j-spring-cloud-gateway/service-doc/src/main/java/com/xiaominfo/swagger/service/doc/handler/SwaggerHandler.java diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHeaderFilter.java b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHeaderFilter.java index d2463cf1b..422e2509a 100644 --- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHeaderFilter.java +++ b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/SwaggerHeaderFilter.java @@ -8,9 +8,9 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; /** - * @auth haoxr + * @link https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/blob/master/knife4j-spring-cloud-gateway/service-doc/src/main/java/com/xiaominfo/swagger/service/doc/config/SwaggerHeaderFilter.java + * @auth xianrui * @date 2021-02-25 16:29 - * @link https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/blob/master/knife4j-spring-cloud-gateway/service-doc/src/main/java/com/xiaominfo/swagger/service/doc/config/SwaggerHeaderFilter.java */ @Component public class SwaggerHeaderFilter extends AbstractGatewayFilterFactory { diff --git a/youlai-gateway/src/main/resources/bootstrap-dev.yml b/youlai-gateway/src/main/resources/bootstrap-dev.yml index 74118fdbd..e9889ab1d 100644 --- a/youlai-gateway/src/main/resources/bootstrap-dev.yml +++ b/youlai-gateway/src/main/resources/bootstrap-dev.yml @@ -13,29 +13,7 @@ spring: config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml - sentinel: - enabled: false # 网关流控开关 - eager: true # 取消控制台懒加载,项目启动即连接Sentinel - transport: - client-ip: localhost - dashboard: localhost:8080 - datasource: - # 网关限流规则,gw-flow为key,随便定义 - gw-flow: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-gw-flow-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: gw-flow - # 网关API自定义分组 - gw-api-group: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-gw-api-group-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: gw-api-group + diff --git a/youlai-gateway/src/main/resources/bootstrap-prod.yml b/youlai-gateway/src/main/resources/bootstrap-prod.yml index d759d91c4..f25fe2241 100644 --- a/youlai-gateway/src/main/resources/bootstrap-prod.yml +++ b/youlai-gateway/src/main/resources/bootstrap-prod.yml @@ -15,24 +15,3 @@ spring: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml namespace: prod_namespace_id - sentinel: - eager: true - transport: - dashboard: e.youlai.tech:8858 - datasource: - # 网关限流 - gw-flow: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-gw-flow-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: gw-flow - # 网关API自定义分组 - gw-api-group: - nacos: - server-addr: ${spring.cloud.nacos.discovery.server-addr} - dataId: ${spring.application.name}-gw-api-group-rules - groupId: SENTINEL_GROUP - data-type: json - rule-type: gw-api-group