.*), /$\\{path}/$\\{path}/v3/api-docs\n\ngateway:\n encode-key: \'thanks,pig4cloud\'\n ignore-clients:\n - test\n - client', '000988cf0102382d3f23df35027b47fd', '2022-05-08 12:10:37', '2022-06-07 14:00:11', 'nacos', '127.0.0.1', '', '', '', '', '', 'yaml', '', '');
INSERT INTO `config_info` VALUES (5, 'pig-monitor-dev.yml', 'DEFAULT_GROUP', 'spring:\n autoconfigure:\n exclude: com.pig4cloud.pig.common.core.config.JacksonConfiguration\n # 安全配置\n security:\n user:\n name: ENC(8Hk2ILNJM8UTOuW/Xi75qg==) # pig\n password: ENC(o6cuPFfUevmTbkmBnE67Ow====) # pig\n', '650bdfa15f60f3faa84dfe6e6878b8cf', '2022-05-08 12:10:37', '2022-05-08 12:10:37', NULL, '127.0.0.1', '', '', NULL, NULL, NULL, 'yaml', NULL, '');
-INSERT INTO `config_info` VALUES (6, 'pig-upms-biz-dev.yml', 'DEFAULT_GROUP', 'security:\n oauth2:\n client:\n client-id: ENC(imENTO7M8bLO38LFSIxnzw==)\n client-secret: ENC(i3cDFhs26sa2Ucrfz2hnQw==)\n scope: server\n\n# 数据源\nspring:\n datasource:\n type: com.zaxxer.hikari.HikariDataSource\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: root\n password: root\n url: jdbc:mysql://pig-mysql:3306/pig?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n\n# 文件上传相关 支持阿里云、华为云、腾讯、minio\noss:\n endpoint: http://minio.pig4cloud.com\n accessKey: lengleng\n secretKey: lengleng\n bucket-name: tmp', '107614b40932e8237787b769e0937ed2', '2022-05-08 12:10:37', '2022-05-08 12:10:37', NULL, '127.0.0.1', '', '', NULL, NULL, NULL, 'yaml', NULL, '');
+INSERT INTO `config_info` VALUES (6, 'pig-upms-biz-dev.yml', 'DEFAULT_GROUP', '# 数据源\nspring:\n datasource:\n type: com.zaxxer.hikari.HikariDataSource\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: root\n password: root\n url: jdbc:mysql://pig-mysql:3306/pig?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n\n# 文件上传相关 支持阿里云、华为云、腾讯、minio\noss:\n endpoint: http://minio.pig4cloud.com\n accessKey: lengleng\n secretKey: lengleng\n bucket-name: tmp', '899d2431d91da0d521378cc7fa61268d', '2022-05-08 12:10:37', '2023-01-28 14:01:46', '', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', '');
INSERT INTO `config_info` VALUES (7, 'pig-xxl-job-admin-dev.yml', 'DEFAULT_GROUP', '# xxl\nxxl:\n job:\n accessToken: default_token\n i18n: zh_CN\n logretentiondays: 30\n triggerpool:\n fast.max: 200\n slow.max: 200\n\n# mybatis\nmybatis:\n mapper-locations: classpath:/mybatis-mapper/*Mapper.xml\n\nspring:\n datasource:\n url: jdbc:mysql://${MYSQL_HOST:pig-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pig_job}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: ${MYSQL_USER:root}\n password: ${MYSQL_PWD:root}\n mvc:\n static-path-pattern: /static/**\n freemarker:\n suffix: .ftl\n request-context-attribute: request\n settings:\n number_format: 0.##########\n mail:\n host: smtp.mxhichina.com\n port: 465\n from: xxxx@gitee.wang\n username: xxxx@gitee.wang\n password: xxxx\n properties:\n mail:\n smtp:\n auth: true\n ssl.enable: true\n starttls.enable: false\n required: false\n# spring boot admin 配置\n\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \'*\'\n endpoint:\n health:\n show-details: ALWAYS\n\n', 'b67cbbd37c8b42cdc6521780b3ed742a', '2022-11-27 17:23:42', '2022-11-27 17:28:01', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', '');
COMMIT;
diff --git a/db/pig_job.sql b/db/pig_job.sql
index 585c6e8bf1b3554de2f4d752bc3a7f20b1a93e32..766178296f540d33db266d7944a47753ece907dd 100644
--- a/db/pig_job.sql
+++ b/db/pig_job.sql
@@ -1,10 +1,10 @@
DROP DATABASE IF EXISTS `pig_job`;
-CREATE DATABASE `pig_job` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+CREATE DATABASE `pig_job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
use `pig_job`;
-SET NAMES utf8;
+SET NAMES utf8mb4;
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -32,7 +32,7 @@ CREATE TABLE `xxl_job_info` (
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -53,7 +53,7 @@ CREATE TABLE `xxl_job_log` (
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -64,7 +64,7 @@ CREATE TABLE `xxl_job_log_report` (
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -75,7 +75,7 @@ CREATE TABLE `xxl_job_logglue` (
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -85,7 +85,7 @@ CREATE TABLE `xxl_job_registry` (
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -95,7 +95,7 @@ CREATE TABLE `xxl_job_group` (
`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -105,12 +105,12 @@ CREATE TABLE `xxl_job_user` (
`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
diff --git a/docker-compose.yml b/docker-compose.yml
index be4193263a711c9f496c142fc9e4faa3f257b1e8..3380751d680e7175bec8baaefb9d19a69a152e0b 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -9,13 +9,9 @@ services:
restart: always
container_name: pig-mysql
image: pig-mysql
- ports:
- - 3306:3306
pig-redis:
image: redis:7.0.0
- ports:
- - 6379:6379
restart: always
container_name: pig-redis
hostname: pig-redis
diff --git a/pig-auth/pom.xml b/pig-auth/pom.xml
index 1e5e2da47c9c7087d584f1b5064692ad4e8d1e1c..9557d78de3f53e184bae675d41c99a3bc4fecfca 100755
--- a/pig-auth/pom.xml
+++ b/pig-auth/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-auth
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
index a6e9105d567dcad462d5fdef34d94a1c30677a24..a67f2c85e51392111d70f0d106c51f7816f4dcc6 100755
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
@@ -17,24 +17,30 @@
package com.pig4cloud.pig.auth.config;
import com.pig4cloud.pig.auth.support.CustomeOAuth2AccessTokenGenerator;
+import com.pig4cloud.pig.auth.support.MaxKeyOAuth2AccessTokenGenerator;
import com.pig4cloud.pig.auth.support.core.CustomeOAuth2TokenCustomizer;
import com.pig4cloud.pig.auth.support.core.FormIdentityLoginConfigurer;
import com.pig4cloud.pig.auth.support.core.PigDaoAuthenticationProvider;
import com.pig4cloud.pig.auth.support.handler.PigAuthenticationFailureEventHandler;
import com.pig4cloud.pig.auth.support.handler.PigAuthenticationSuccessEventHandler;
+import com.pig4cloud.pig.auth.support.maxkey.OAuth2MaxKeyAuthenticationConvert;
+import com.pig4cloud.pig.auth.support.maxkey.OAuth2MaxKeyAuthenticationProvider;
import com.pig4cloud.pig.auth.support.password.OAuth2ResourceOwnerPasswordAuthenticationConverter;
import com.pig4cloud.pig.auth.support.password.OAuth2ResourceOwnerPasswordAuthenticationProvider;
import com.pig4cloud.pig.auth.support.sms.OAuth2ResourceOwnerSmsAuthenticationConverter;
import com.pig4cloud.pig.auth.support.sms.OAuth2ResourceOwnerSmsAuthenticationProvider;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
+import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
import org.springframework.security.oauth2.server.authorization.token.DelegatingOAuth2TokenGenerator;
@@ -44,14 +50,13 @@ import org.springframework.security.oauth2.server.authorization.web.authenticati
import org.springframework.security.web.DefaultSecurityFilterChain;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationConverter;
-import org.springframework.security.web.util.matcher.RequestMatcher;
import java.util.Arrays;
/**
* @author lengleng
* @date 2022/5/27
- *
+ *
* 认证服务器配置
*/
@Configuration
@@ -63,25 +68,34 @@ public class AuthorizationServerConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
- OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = new OAuth2AuthorizationServerConfigurer();
-
- http.apply(authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {// 个性化认证授权端点
- tokenEndpoint.accessTokenRequestConverter(accessTokenRequestConverter()) // 注入自定义的授权认证Converter
- .accessTokenResponseHandler(new PigAuthenticationSuccessEventHandler()) // 登录成功处理器
- .errorResponseHandler(new PigAuthenticationFailureEventHandler());// 登录失败处理器
- }).clientAuthentication(oAuth2ClientAuthenticationConfigurer -> // 个性化客户端认证
- oAuth2ClientAuthenticationConfigurer.errorResponseHandler(new PigAuthenticationFailureEventHandler()))// 处理客户端认证异常
+
+ // OAuth 2.1 默认配置
+ // 缺省配置:authorizeRequests.anyRequest().authenticated()、
+ // csrf.ignoringRequestMatchers(endpointsMatcher) 等等
+ OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
+
+ // 使用 HttpSecurity 获取 OAuth 2.1 配置中的 OAuth2AuthorizationServerConfigurer 对象
+ OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = http
+ .getConfigurer(OAuth2AuthorizationServerConfigurer.class);
+
+ authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {// 个性化认证授权端点
+ tokenEndpoint.accessTokenRequestConverter(accessTokenRequestConverter()) // 注入自定义的授权认证Converter
+ .accessTokenResponseHandler(new PigAuthenticationSuccessEventHandler()) // 登录成功处理器
+ .errorResponseHandler(new PigAuthenticationFailureEventHandler());// 登录失败处理器
+ }).clientAuthentication(oAuth2ClientAuthenticationConfigurer -> // 个性化客户端认证
+ oAuth2ClientAuthenticationConfigurer.errorResponseHandler(new PigAuthenticationFailureEventHandler()))// 处理客户端认证异常
.authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint// 授权码端点个性化confirm页面
- .consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI)));
-
- RequestMatcher endpointsMatcher = authorizationServerConfigurer.getEndpointsMatcher();
- DefaultSecurityFilterChain securityFilterChain = http.requestMatcher(endpointsMatcher)
- .authorizeRequests(authorizeRequests -> authorizeRequests.anyRequest().authenticated())
- .apply(authorizationServerConfigurer.authorizationService(authorizationService)// redis存储token的实现
- .authorizationServerSettings(AuthorizationServerSettings.builder()
- .issuer(SecurityConstants.PROJECT_LICENSE).build()))
+ .consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI));
+
+ DefaultSecurityFilterChain securityFilterChain = authorizationServerConfigurer
+ .authorizationService(authorizationService)// redis存储token的实现
+ .authorizationServerSettings(
+ AuthorizationServerSettings.builder().issuer(SecurityConstants.PROJECT_LICENSE).build())
// 授权码登录的登录页个性化
- .and().apply(new FormIdentityLoginConfigurer()).and().build();
+ .and()
+ .apply(new FormIdentityLoginConfigurer())
+ .and()
+ .build();
// 注入自定义授权模式实现
addCustomOAuth2GrantAuthenticationProvider(http);
@@ -91,9 +105,10 @@ public class AuthorizationServerConfiguration {
/**
* 令牌生成规则实现
* client:username:uuid
+ *
* @return OAuth2TokenGenerator
*/
- @Bean
+ @Bean(name = "oAuth2TokenGenerator")
public OAuth2TokenGenerator oAuth2TokenGenerator() {
CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator();
// 注入Token 增加关联用户信息
@@ -101,8 +116,18 @@ public class AuthorizationServerConfiguration {
return new DelegatingOAuth2TokenGenerator(accessTokenGenerator, new OAuth2RefreshTokenGenerator());
}
+ @Bean(name = "maxKeyOAuth2TokenGenerator")
+ public OAuth2TokenGenerator maxKeyOAuth2TokenGenerator() {
+ MaxKeyOAuth2AccessTokenGenerator maxKeyOAuth2AccessTokenGenerator = new MaxKeyOAuth2AccessTokenGenerator();
+ // 注入Token 增加关联用户信息
+ maxKeyOAuth2AccessTokenGenerator.setAccessTokenCustomizer(new CustomeOAuth2TokenCustomizer());
+ return new DelegatingOAuth2TokenGenerator(maxKeyOAuth2AccessTokenGenerator, new OAuth2RefreshTokenGenerator());
+ }
+
+
/**
* request -> xToken 注入请求转换器
+ *
* @return DelegatingAuthenticationConverter
*/
private AuthenticationConverter accessTokenRequestConverter() {
@@ -111,15 +136,16 @@ public class AuthorizationServerConfiguration {
new OAuth2ResourceOwnerSmsAuthenticationConverter(), new OAuth2RefreshTokenAuthenticationConverter(),
new OAuth2ClientCredentialsAuthenticationConverter(),
new OAuth2AuthorizationCodeAuthenticationConverter(),
+ new OAuth2MaxKeyAuthenticationConvert(),
new OAuth2AuthorizationCodeRequestAuthenticationConverter()));
}
/**
* 注入授权模式实现提供方
- *
+ *
* 1. 密码模式
* 2. 短信登录
- *
+ * 3. MaxKey授权码登陆
*/
@SuppressWarnings("unchecked")
private void addCustomOAuth2GrantAuthenticationProvider(HttpSecurity http) {
@@ -132,12 +158,16 @@ public class AuthorizationServerConfiguration {
OAuth2ResourceOwnerSmsAuthenticationProvider resourceOwnerSmsAuthenticationProvider = new OAuth2ResourceOwnerSmsAuthenticationProvider(
authenticationManager, authorizationService, oAuth2TokenGenerator());
+ OAuth2MaxKeyAuthenticationProvider oAuth2MaxKeyAuthenticationProvider = new OAuth2MaxKeyAuthenticationProvider(authenticationManager, authorizationService, oAuth2TokenGenerator());
+
// 处理 UsernamePasswordAuthenticationToken
http.authenticationProvider(new PigDaoAuthenticationProvider());
// 处理 OAuth2ResourceOwnerPasswordAuthenticationToken
http.authenticationProvider(resourceOwnerPasswordAuthenticationProvider);
// 处理 OAuth2ResourceOwnerSmsAuthenticationToken
http.authenticationProvider(resourceOwnerSmsAuthenticationProvider);
+ // 处理 oAuth2MaxKeyAuthenticationProvider
+ http.authenticationProvider(oAuth2MaxKeyAuthenticationProvider);
}
}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java
index 0ebc699d9a1821d14d1b01016b6e18c8ce9d481d..1fa2893ef7f58678da92345744946a7ed262f129 100755
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java
@@ -41,9 +41,15 @@ public class WebSecurityConfiguration {
*/
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
- http.authorizeRequests(authorizeRequests -> authorizeRequests.antMatchers("/token/*").permitAll()// 开放自定义的部分端点
- .anyRequest().authenticated()).headers().frameOptions().sameOrigin()// 避免iframe同源无法登录
- .and().apply(new FormIdentityLoginConfigurer()); // 表单登录个性化
+ http.authorizeRequests(authorizeRequests -> authorizeRequests.antMatchers("/token/*","/maxkey/*")
+ .permitAll()// 开放自定义的部分端点
+ .anyRequest()
+ .authenticated())
+ .headers()
+ .frameOptions()
+ .sameOrigin()// 避免iframe同源无法登录
+ .and()
+ .apply(new FormIdentityLoginConfigurer()); // 表单登录个性化
// 处理 UsernamePasswordAuthenticationToken
http.authenticationProvider(new PigDaoAuthenticationProvider());
return http.build();
@@ -61,8 +67,13 @@ public class WebSecurityConfiguration {
@Order(0)
SecurityFilterChain resources(HttpSecurity http) throws Exception {
http.requestMatchers((matchers) -> matchers.antMatchers("/actuator/**", "/css/**", "/error"))
- .authorizeHttpRequests((authorize) -> authorize.anyRequest().permitAll()).requestCache().disable()
- .securityContext().disable().sessionManagement().disable();
+ .authorizeHttpRequests((authorize) -> authorize.anyRequest().permitAll())
+ .requestCache()
+ .disable()
+ .securityContext()
+ .disable()
+ .sessionManagement()
+ .disable();
return http.build();
}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
index 99b64714535553384f0c626854da741e39a46268..bab2df56f9914f459d8110bd283617863b342853 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
@@ -62,6 +62,7 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.security.Principal;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -91,23 +92,27 @@ public class PigTokenEndpoint {
/**
* 认证页面
+ *
* @param modelAndView
- * @param error 表单登录失败处理回调的错误信息
+ * @param error 表单登录失败处理回调的错误信息
* @return ModelAndView
*/
@GetMapping("/login")
public ModelAndView require(ModelAndView modelAndView, @RequestParam(required = false) String error) {
modelAndView.setViewName("ftl/login");
+ Map map = new HashMap<>();
modelAndView.addObject("error", error);
return modelAndView;
+
}
@GetMapping("/confirm_access")
public ModelAndView confirm(Principal principal, ModelAndView modelAndView,
- @RequestParam(OAuth2ParameterNames.CLIENT_ID) String clientId,
- @RequestParam(OAuth2ParameterNames.SCOPE) String scope,
- @RequestParam(OAuth2ParameterNames.STATE) String state) {
- SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId)).getData()
+ @RequestParam(OAuth2ParameterNames.CLIENT_ID) String clientId,
+ @RequestParam(OAuth2ParameterNames.SCOPE) String scope,
+ @RequestParam(OAuth2ParameterNames.STATE) String state) {
+ SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId))
+ .getData()
.orElseThrow(() -> new OAuthClientException("clientId 不合法"));
Set authorizedScopes = StringUtils.commaDelimitedListToSet(clientDetails.getScope());
@@ -121,6 +126,7 @@ public class PigTokenEndpoint {
/**
* 退出并删除token
+ *
* @param authHeader Authorization
*/
@DeleteMapping("/logout")
@@ -135,6 +141,7 @@ public class PigTokenEndpoint {
/**
* 校验token
+ *
* @param token 令牌
*/
@SneakyThrows
@@ -165,6 +172,7 @@ public class PigTokenEndpoint {
/**
* 令牌管理调用
+ *
* @param token token
*/
@Inner
@@ -191,6 +199,7 @@ public class PigTokenEndpoint {
/**
* 查询token
+ *
* @param params 分页参数
* @return
*/
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/facade/MaxKeySSOServiceFacade.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/facade/MaxKeySSOServiceFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..690784e01437245fca28164aca324ea09db9745b
--- /dev/null
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/facade/MaxKeySSOServiceFacade.java
@@ -0,0 +1,82 @@
+package com.pig4cloud.pig.auth.facade;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+
+@Service
+public class MaxKeySSOServiceFacade {
+
+ @Value("${sso.maxkey.oauth2.maxkey_token_uri:http://sso.maxkey.top/sign/authz/oauth/v20/token?client_id=%s&client_secret=%s&grant_type=%s&redirect_uri=%s&code=%s}")
+ private String maxkeyTokenUri;
+
+ @Value("${sso.maxkey.oauth2.maxkey_getme_uri:http://sso.maxkey.top/sign/api/oauth/v20/me?access_token=%s}")
+ private String maxkeyGetmeUri;
+
+ @Value("${sso.maxkey.oauth2.client_id:b32834accb544ea7a9a09dcae4a36403}")
+ private String clientId;
+
+ @Value("${sso.maxkey.oauth2.response_type:code}")
+ private String responseType;
+
+ @Value("${sso.maxkey.oauth2.redirect_uri:http://localhost:8080/login}")
+ private String redirectUri;
+
+ @Value("${sso.maxkey.oauth2.client_secret:E9UO53P3JH52aQAcnLP2FlLv8olKIB7u}")
+ private String clientSecret;
+ @Value("${sso.maxkey.oauth2.grant_type:authorization_code}")
+ private String grantType;
+
+ @Resource
+ OkHttpClient okHttpClient;
+
+
+ // TODO
+ public String getUserInfoByToken(String accessToken) {
+ String userInfo;
+ try {
+ String url = String.format(maxkeyGetmeUri, accessToken);
+ Request request = new Request.Builder()
+ //参数放到链接后面
+ .url(url).build();
+ //发送请求
+ Response response = okHttpClient.newCall(request).execute();
+ //将响应数据转换字符传(实际是json字符传)
+ userInfo = response.body().string();
+ JSONObject jsonObject = JSON.parseObject(userInfo);
+ System.out.println(jsonObject);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return userInfo;
+ }
+
+ // TODO
+ public String getTokenByCode(String code) {
+ String accessToken;
+ try {
+ String url = String.format(maxkeyTokenUri, clientId, clientSecret, grantType, redirectUri, code);
+ Request request = new Request.Builder()
+ //参数放到链接后面
+ .url(url).build();
+ //发送请求
+ Response response = okHttpClient.newCall(request).execute();
+ //将响应数据转换字符传(实际是json字符传)
+
+ accessToken = JSONObject.parseObject(response.body().string()).getString("access_token");
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ return accessToken;
+ }
+
+}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
index 7865f68d376b6fb1a8d21c239dcbd1f5f69b6679..667f6da5ada7b3382a871bc1233a4c93f85942e4 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
@@ -30,7 +30,7 @@ public class CustomeOAuth2AccessTokenGenerator implements OAuth2TokenGenerator {
+
+ private OAuth2TokenCustomizer accessTokenCustomizer;
+
+ @Nullable
+ @Override
+ public OAuth2AccessToken generate(OAuth2TokenContext context) {
+ if (!OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType()) || !OAuth2TokenFormat.REFERENCE
+ .equals(context.getRegisteredClient().getTokenSettings().getAccessTokenFormat())) {
+ return null;
+ }
+
+ String issuer = null;
+ if (context.getAuthorizationServerContext() != null) {
+ issuer = context.getAuthorizationServerContext().getIssuer();
+ }
+ RegisteredClient registeredClient = context.getRegisteredClient();
+
+ Instant issuedAt = Instant.now();
+ Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getAccessTokenTimeToLive());
+
+ // @formatter:off
+ OAuth2TokenClaimsSet.Builder claimsBuilder = OAuth2TokenClaimsSet.builder();
+ if (StringUtils.hasText(issuer)) {
+ claimsBuilder.issuer(issuer);
+ }
+ claimsBuilder
+ .subject(context.getPrincipal().getName())
+ .audience(Collections.singletonList(registeredClient.getClientId()))
+ .issuedAt(issuedAt)
+ .expiresAt(expiresAt)
+ .notBefore(issuedAt)
+ .id(UUID.randomUUID().toString());
+ if (!CollectionUtils.isEmpty(context.getAuthorizedScopes())) {
+ claimsBuilder.claim(OAuth2ParameterNames.SCOPE, context.getAuthorizedScopes());
+ }
+ // @formatter:on
+
+ if (this.accessTokenCustomizer != null) {
+ // @formatter:off
+ OAuth2TokenClaimsContext.Builder accessTokenContextBuilder = OAuth2TokenClaimsContext.with(claimsBuilder)
+ .registeredClient(context.getRegisteredClient())
+ .principal(context.getPrincipal())
+ .authorizationServerContext(context.getAuthorizationServerContext())
+ .authorizedScopes(context.getAuthorizedScopes())
+ .tokenType(context.getTokenType())
+ .authorizationGrantType(context.getAuthorizationGrantType());
+ if (context.getAuthorization() != null) {
+ accessTokenContextBuilder.authorization(context.getAuthorization());
+ }
+ if (context.getAuthorizationGrant() != null) {
+ accessTokenContextBuilder.authorizationGrant(context.getAuthorizationGrant());
+ }
+ // @formatter:on
+
+ OAuth2TokenClaimsContext accessTokenContext = accessTokenContextBuilder.build();
+ this.accessTokenCustomizer.customize(accessTokenContext);
+ }
+
+ OAuth2TokenClaimsSet accessTokenClaimsSet = claimsBuilder.build();
+ return new MaxKeyOAuth2AccessTokenGenerator.OAuth2AccessTokenClaims(OAuth2AccessToken.TokenType.BEARER,
+ UUID.randomUUID().toString(), accessTokenClaimsSet.getIssuedAt(), accessTokenClaimsSet.getExpiresAt(),
+ context.getAuthorizedScopes(), accessTokenClaimsSet.getClaims());
+ }
+
+ /**
+ * Sets the {@link OAuth2TokenCustomizer} that customizes the
+ * {@link OAuth2TokenClaimsContext#getClaims() claims} for the
+ * {@link OAuth2AccessToken}.
+ * @param accessTokenCustomizer the {@link OAuth2TokenCustomizer} that customizes the
+ * claims for the {@code OAuth2AccessToken}
+ */
+ public void setAccessTokenCustomizer(OAuth2TokenCustomizer accessTokenCustomizer) {
+ Assert.notNull(accessTokenCustomizer, "accessTokenCustomizer cannot be null");
+ this.accessTokenCustomizer = accessTokenCustomizer;
+ }
+
+ private static final class OAuth2AccessTokenClaims extends OAuth2AccessToken implements ClaimAccessor {
+
+ private final Map claims;
+
+ private OAuth2AccessTokenClaims(TokenType tokenType, String tokenValue, Instant issuedAt, Instant expiresAt,
+ Set scopes, Map claims) {
+ super(tokenType, tokenValue, issuedAt, expiresAt, scopes);
+ this.claims = claims;
+ }
+
+ @Override
+ public Map getClaims() {
+ return this.claims;
+ }
+
+ }
+
+}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java
index 96944f7daba0367612ba9f7ed3b2cfc757a69795..2f681311caf6f962b5ba5a4d06f2ac9411dedfd3 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java
@@ -83,10 +83,11 @@ public abstract class OAuth2ResourceOwnerBaseAuthenticationConverter additionalParameters = parameters.entrySet().stream()
- .filter(e -> !e.getKey().equals(OAuth2ParameterNames.GRANT_TYPE)
- && !e.getKey().equals(OAuth2ParameterNames.SCOPE))
- .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
+ Map additionalParameters = parameters.entrySet()
+ .stream()
+ .filter(e -> !e.getKey().equals(OAuth2ParameterNames.GRANT_TYPE)
+ && !e.getKey().equals(OAuth2ParameterNames.SCOPE))
+ .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
// 创建token
return buildToken(clientPrincipal, requestedScopes, additionalParameters);
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
index f551f77b98f4e0074866e22825cb199ea5b1bd80..0ef6892c1950a21228c1372bc0761061b0e33d7d 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
@@ -3,6 +3,7 @@ package com.pig4cloud.pig.auth.support.base;
import cn.hutool.extra.spring.SpringUtil;
import com.pig4cloud.pig.common.security.util.OAuth2ErrorCodesExpand;
import com.pig4cloud.pig.common.security.util.ScopeException;
+import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.support.MessageSourceAccessor;
@@ -35,6 +36,7 @@ import java.util.function.Supplier;
*
* 处理自定义授权
*/
+@Slf4j
public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider
implements AuthenticationProvider {
@@ -109,29 +111,29 @@ public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider authorizedScopes;
// Default to configured scopes
- if (!CollectionUtils.isEmpty(resouceOwnerBaseAuthentication.getScopes())) {
- for (String requestedScope : resouceOwnerBaseAuthentication.getScopes()) {
+ if (!CollectionUtils.isEmpty(resourceOwnerBaseAuthentication.getScopes())) {
+ for (String requestedScope : resourceOwnerBaseAuthentication.getScopes()) {
if (!registeredClient.getScopes().contains(requestedScope)) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.INVALID_SCOPE);
}
}
- authorizedScopes = new LinkedHashSet<>(resouceOwnerBaseAuthentication.getScopes());
+ authorizedScopes = new LinkedHashSet<>(resourceOwnerBaseAuthentication.getScopes());
}
else {
throw new ScopeException(OAuth2ErrorCodesExpand.SCOPE_IS_EMPTY);
}
- Map reqParameters = resouceOwnerBaseAuthentication.getAdditionalParameters();
+ Map reqParameters = resourceOwnerBaseAuthentication.getAdditionalParameters();
try {
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = buildToken(reqParameters);
@@ -139,7 +141,7 @@ public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider) () -> new InternalAuthenticationServiceException("web request is empty"));
+ HttpServletRequest request = WebUtils.getRequest()
+ .orElseThrow(
+ (Supplier) () -> new InternalAuthenticationServiceException("web request is empty"));
Map paramMap = ServletUtil.getParamMap(request);
String grantType = paramMap.get(OAuth2ParameterNames.GRANT_TYPE);
@@ -104,12 +104,13 @@ public class PigDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat
}
Map userDetailsServiceMap = SpringUtil
- .getBeansOfType(PigUserDetailsService.class);
+ .getBeansOfType(PigUserDetailsService.class);
String finalClientId = clientId;
- Optional optional = userDetailsServiceMap.values().stream()
- .filter(service -> service.support(finalClientId, grantType))
- .max(Comparator.comparingInt(Ordered::getOrder));
+ Optional optional = userDetailsServiceMap.values()
+ .stream()
+ .filter(service -> service.support(finalClientId, grantType))
+ .max(Comparator.comparingInt(Ordered::getOrder));
if (!optional.isPresent()) {
throw new InternalAuthenticationServiceException("UserDetailsService error , not register");
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
index a12b2a99df77d857c9396d9783b2300b4576a225..979282e179ebbb2fed9efdb47bbdd18b4a05f766 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
@@ -23,6 +23,7 @@ import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.util.MsgUtils;
import com.pig4cloud.pig.common.core.util.R;
import com.pig4cloud.pig.common.core.util.SpringContextHolder;
+import com.pig4cloud.pig.common.core.util.WebUtils;
import com.pig4cloud.pig.common.log.event.SysLogEvent;
import com.pig4cloud.pig.common.log.util.LogTypeEnum;
import com.pig4cloud.pig.common.log.util.SysLogUtils;
@@ -75,6 +76,8 @@ public class PigAuthenticationFailureEventHandler implements AuthenticationFailu
Long endTime = System.currentTimeMillis();
logVo.setTime(endTime - startTime);
}
+
+ logVo.setServiceId(WebUtils.getClientId());
logVo.setCreateBy(username);
logVo.setUpdateBy(username);
SpringContextHolder.publishEvent(new SysLogEvent(logVo));
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
index 162babd2133ea5fbf0800244d2efd67f9830ff80..09e6f01f88b659b4e2ab96d89e8ec4a754ffbae8 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
@@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
@@ -71,7 +72,10 @@ public class PigAuthenticationSuccessEventHandler implements AuthenticationSucce
// 发送异步日志事件
PigUser userInfo = (PigUser) map.get(SecurityConstants.DETAILS_USER);
log.info("用户:{} 登录成功", userInfo.getName());
- SecurityContextHolder.getContext().setAuthentication(accessTokenAuthentication);
+ // 避免 race condition
+ SecurityContext context = SecurityContextHolder.createEmptyContext();
+ context.setAuthentication(accessTokenAuthentication);
+ SecurityContextHolder.setContext(context);
SysLog logVo = SysLogUtils.getSysLog();
logVo.setTitle("登录成功");
String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME);
@@ -80,6 +84,8 @@ public class PigAuthenticationSuccessEventHandler implements AuthenticationSucce
Long endTime = System.currentTimeMillis();
logVo.setTime(endTime - startTime);
}
+
+ logVo.setServiceId(accessTokenAuthentication.getRegisteredClient().getClientId());
logVo.setCreateBy(userInfo.getName());
logVo.setUpdateBy(userInfo.getName());
SpringContextHolder.publishEvent(new SysLogEvent(logVo));
@@ -99,7 +105,8 @@ public class PigAuthenticationSuccessEventHandler implements AuthenticationSucce
Map additionalParameters = accessTokenAuthentication.getAdditionalParameters();
OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue())
- .tokenType(accessToken.getTokenType()).scopes(accessToken.getScopes());
+ .tokenType(accessToken.getTokenType())
+ .scopes(accessToken.getScopes());
if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationConvert.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationConvert.java
new file mode 100644
index 0000000000000000000000000000000000000000..a12db6239f8ff3c9574e2c9099f41bab7ab67dd3
--- /dev/null
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationConvert.java
@@ -0,0 +1,39 @@
+package com.pig4cloud.pig.auth.support.maxkey;
+
+import com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuthenticationConverter;
+import com.pig4cloud.pig.common.security.util.OAuth2EndpointUtils;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.oauth2.core.AuthorizationGrantType;
+import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
+import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType;
+import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
+import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.Set;
+
+public class OAuth2MaxKeyAuthenticationConvert extends OAuth2ResourceOwnerBaseAuthenticationConverter {
+
+ @Override
+ public boolean support(String grantType) {
+ System.out.println(grantType);
+ return OAuth2AuthorizationResponseType.CODE.getValue().equals(grantType);
+ }
+
+ @Override
+ public OAuth2MaxKeyAuthenticationToken buildToken(Authentication clientPrincipal, Set requestedScopes, Map additionalParameters) {
+ return new OAuth2MaxKeyAuthenticationToken(new AuthorizationGrantType(OAuth2AuthorizationResponseType.CODE.getValue()), clientPrincipal, requestedScopes, additionalParameters);
+ }
+
+ @Override
+ public void checkParams(HttpServletRequest request) {
+ MultiValueMap parameters = OAuth2EndpointUtils.getParameters(request);
+ String code = parameters.getFirst(OAuth2ParameterNames.CODE);
+ if (!StringUtils.hasText(code) || parameters.get(OAuth2ParameterNames.CODE).size() != 1) {
+ OAuth2EndpointUtils.throwError(OAuth2ErrorCodes.INVALID_REQUEST, OAuth2ParameterNames.CODE,
+ OAuth2EndpointUtils.ACCESS_TOKEN_REQUEST_ERROR_URI);
+ }
+ }
+}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationProvider.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce031e0e33c8b3346b78dd816a4db7e486acde17
--- /dev/null
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationProvider.java
@@ -0,0 +1,66 @@
+package com.pig4cloud.pig.auth.support.maxkey;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuthenticationProvider;
+import com.pig4cloud.pig.auth.support.sms.OAuth2ResourceOwnerSmsAuthenticationToken;
+import com.pig4cloud.pig.common.core.constant.SecurityConstants;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.oauth2.core.AuthorizationGrantType;
+import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
+import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
+import org.springframework.security.oauth2.core.OAuth2Token;
+import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
+import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
+import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
+import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+public class OAuth2MaxKeyAuthenticationProvider extends OAuth2ResourceOwnerBaseAuthenticationProvider implements AuthenticationProvider {
+
+
+ private static final Logger LOGGER = LogManager.getLogger(OAuth2MaxKeyAuthenticationProvider.class);
+
+
+ /**
+ * Constructs an {@code OAuth2AuthorizationCodeAuthenticationProvider} using the
+ * provided parameters.
+ *
+ * @param authenticationManager
+ * @param authorizationService the authorization service
+ * @param tokenGenerator the token generator
+ * @since 0.2.3
+ */
+ public OAuth2MaxKeyAuthenticationProvider(AuthenticationManager authenticationManager, OAuth2AuthorizationService authorizationService, OAuth2TokenGenerator extends OAuth2Token> tokenGenerator) {
+ super(authenticationManager, authorizationService, SpringUtil.getBean("maxKeyOAuth2TokenGenerator"));
+ }
+
+ @Override
+ public boolean supports(Class> authentication) {
+ boolean supports = OAuth2MaxKeyAuthenticationToken.class.isAssignableFrom(authentication);
+ LOGGER.debug("supports authentication=" + authentication + " returning " + supports);
+ return supports;
+ }
+
+ @Override
+ public void checkClient(RegisteredClient registeredClient) {
+ assert registeredClient != null;
+ if (!registeredClient.getAuthorizationGrantTypes()
+ .contains(AuthorizationGrantType.PASSWORD)) {
+ throw new OAuth2AuthenticationException(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT);
+ }
+ }
+
+ @Override
+ public UsernamePasswordAuthenticationToken buildToken(Map reqParameters) {
+ String code = (String) reqParameters.get(OAuth2ParameterNames.CODE);
+ return new UsernamePasswordAuthenticationToken(code, null);
+ }
+}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationToken.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationToken.java
new file mode 100644
index 0000000000000000000000000000000000000000..2911272334fdfa3a30d0aabe2e7f3204db17529e
--- /dev/null
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/maxkey/OAuth2MaxKeyAuthenticationToken.java
@@ -0,0 +1,18 @@
+package com.pig4cloud.pig.auth.support.maxkey;
+
+import com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.oauth2.core.AuthorizationGrantType;
+
+import java.util.Map;
+import java.util.Set;
+
+
+public class OAuth2MaxKeyAuthenticationToken extends OAuth2ResourceOwnerBaseAuthenticationToken {
+
+ public OAuth2MaxKeyAuthenticationToken(AuthorizationGrantType authorizationGrantType,
+ Authentication clientPrincipal, Set scopes, Map additionalParameters) {
+ super(authorizationGrantType, clientPrincipal, scopes, additionalParameters);
+ }
+
+}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
index bc556612772a2396d2be582f0845d47e3e368a66..d7779e90198d687a550ab6bc2d19b99f54b13e2e 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
@@ -52,7 +52,7 @@ public class OAuth2ResourceOwnerSmsAuthenticationProvider
public void checkClient(RegisteredClient registeredClient) {
assert registeredClient != null;
if (!registeredClient.getAuthorizationGrantTypes()
- .contains(new AuthorizationGrantType(SecurityConstants.APP))) {
+ .contains(new AuthorizationGrantType(SecurityConstants.APP))) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT);
}
}
diff --git a/pig-auth/src/main/resources/application.yml b/pig-auth/src/main/resources/application.yml
index 3690b33d37c0324eec92acae55a12685e09da6bb..8c60e73e60b42a207c12ba89c7da6e8a3c9ef853 100755
--- a/pig-auth/src/main/resources/application.yml
+++ b/pig-auth/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-common/pig-common-bom/pom.xml b/pig-common/pig-common-bom/pom.xml
index b82dd87b97c45265d40ae5b8ea2812df61b2c80f..ef5e0fac5debb90c551d96db0be9c35ca6521ae1 100644
--- a/pig-common/pig-common-bom/pom.xml
+++ b/pig-common/pig-common-bom/pom.xml
@@ -6,7 +6,7 @@
com.pig4cloud
pig-common-bom
- 3.6.4
+ 3.6.7
pom
pig-common-bom
@@ -15,7 +15,7 @@
${project.version}
- 2.7.6
+ 2.7.10
UTF-8
2.17.1
1.8
@@ -25,15 +25,15 @@
1.2.83
1.6.9
2.2.0
- 3.5.2
+ 3.5.3.1
8.0.31
- 1.5.2
+ 1.6.1
1.2.6
7.1
1.0.5
2.0.2
2.3.5
- 5.8.10
+ 5.8.17
2.7.4
1.8.4
diff --git a/pig-common/pig-common-core/pom.xml b/pig-common/pig-common-core/pom.xml
index d8457f55e26b730bc8843779c190d301708dc84a..6b3a2332e15b157299902cb63a637dc721503166 100755
--- a/pig-common/pig-common-core/pom.xml
+++ b/pig-common/pig-common-core/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-core
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/JacksonConfiguration.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/JacksonConfiguration.java
old mode 100755
new mode 100644
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RedisTemplateConfiguration.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RedisTemplateConfiguration.java
old mode 100755
new mode 100644
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RestTemplateConfiguration.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RestTemplateConfiguration.java
old mode 100755
new mode 100644
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
index 6668c673e3f60194a97ad532c036f3bf5a3eea36..bf689fcd13faaaed535917c2d21fcb45667f7348 100755
--- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
+++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
@@ -81,7 +81,6 @@ public class ClassUtils extends org.springframework.util.ClassUtils {
specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod);
// 先找方法,再找方法上的类
A annotation = AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType);
- ;
if (null != annotation) {
return annotation;
}
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
index ea59db5ace2177ab38fc7e57a6a8d23aeb580ec2..bc48065accd49516e13017e953169879b0f57932 100644
--- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
+++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
@@ -210,7 +210,7 @@ public class RetOps {
* @throws Ex 断言失败时抛出
*/
public RetOps assertDataNotEmpty(Function super R, ? extends Ex> func) throws Ex {
- if (ObjectUtil.isNotEmpty(original.getData())) {
+ if (ObjectUtil.isEmpty(original.getData())) {
throw func.apply(original);
}
return this;
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
index e454735fd42838e3622d0cc3c0040991e62ce024..11a842bdeae83a64f502cc4d4cac91ba8e2a06c2 100755
--- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
+++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
@@ -105,13 +105,20 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
response.addCookie(cookie);
}
+ public ServletRequestAttributes getServletRequestAttributes() {
+ return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ }
+
/**
* 获取 HttpServletRequest
* @return {HttpServletRequest}
*/
public Optional getRequest() {
- return Optional
- .ofNullable(((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
+ ServletRequestAttributes servletRequestAttributes = getServletRequestAttributes();
+ if (servletRequestAttributes == null) {
+ return Optional.empty();
+ }
+ return Optional.of(servletRequestAttributes.getRequest());
}
/**
@@ -119,7 +126,11 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
* @return {HttpServletResponse}
*/
public HttpServletResponse getResponse() {
- return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+ ServletRequestAttributes servletRequestAttributes = getServletRequestAttributes();
+ if (servletRequestAttributes == null) {
+ throw new CheckedException("无法获取HttpServletRequest");
+ }
+ return servletRequestAttributes.getResponse();
}
/**
diff --git a/pig-common/pig-common-datasource/pom.xml b/pig-common/pig-common-datasource/pom.xml
index 0af20a6ea1fc03a7a555d4224501e7e811b89969..e03d585e08ece72f5404178d95b8b3b2d57929e2 100644
--- a/pig-common/pig-common-datasource/pom.xml
+++ b/pig-common/pig-common-datasource/pom.xml
@@ -21,7 +21,7 @@
pig-common
com.pig4cloud
- 3.6.4
+ 3.6.7
4.0.0
diff --git a/pig-common/pig-common-feign/pom.xml b/pig-common/pig-common-feign/pom.xml
index 26451d25c0db32e4ffd3ef2f8711a11eab414022..0f2332db27d0abe610fba0eb6d1b155d4135513d 100755
--- a/pig-common/pig-common-feign/pom.xml
+++ b/pig-common/pig-common-feign/pom.xml
@@ -16,52 +16,58 @@
-->
-
- com.pig4cloud
- pig-common
- 3.6.4
-
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ com.pig4cloud
+ pig-common
+ 3.6.7
+
- 4.0.0
- jar
- pig-common-feign
- feign-sentinel服务降级熔断、限流组件
+ 4.0.0
+ jar
+ pig-common-feign
+ feign-sentinel服务降级熔断、限流组件
-
-
- com.pig4cloud
- pig-common-core
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-sentinel
-
-
-
- org.springframework.cloud
- spring-cloud-starter-openfeign
-
-
-
- io.github.openfeign
- feign-okhttp
-
-
-
- org.springframework.cloud
- spring-cloud-starter-loadbalancer
-
-
-
- com.github.ben-manes.caffeine
- caffeine
-
-
-
- org.springframework.security
- spring-security-core
-
-
+
+
+ com.pig4cloud
+ pig-common-core
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ io.github.openfeign
+ feign-okhttp
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+
+
+
+ org.springframework.security
+ spring-security-core
+
+
+
+ org.springframework.retry
+ spring-retry
+ true
+
+
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
index 44de28367bf78d50833bde096de97c787f64a829..ff9fa669bfee85b73ab73937bbf03547345e6082 100755
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
@@ -24,6 +24,7 @@ import com.pig4cloud.pig.common.feign.sentinel.ext.PigSentinelFeign;
import com.pig4cloud.pig.common.feign.sentinel.handle.PigUrlBlockHandler;
import com.pig4cloud.pig.common.feign.sentinel.parser.PigHeaderRequestOriginParser;
import feign.Feign;
+import okhttp3.OkHttpClient;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -31,6 +32,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
+import java.util.concurrent.TimeUnit;
+
/**
* sentinel 配置
*
@@ -61,4 +64,18 @@ public class PigFeignAutoConfiguration {
return new PigHeaderRequestOriginParser();
}
+ /**
+ * OkHttp 客户端配置
+ * @return OkHttp 客户端配
+ */
+ @Bean
+ public OkHttpClient okHttpClient() {
+ return new OkHttpClient.Builder().retryOnConnectionFailure(false) // 是否开启缓存
+ .connectTimeout(30L, TimeUnit.SECONDS) // 连接超时时间
+ .readTimeout(30L, TimeUnit.SECONDS) // 读取超时时间
+ .writeTimeout(30L, TimeUnit.SECONDS)
+ .followRedirects(true) // 是否允许重定向
+ .build();
+ }
+
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignRetryAutoConfiguration.java
similarity index 54%
rename from pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java
rename to pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignRetryAutoConfiguration.java
index a66b52d0e1655f583bf96f66d5ba48ebdecdb225..413c35f7173ea1d5a807444ae849b415672f6ab1 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignRetryAutoConfiguration.java
@@ -14,22 +14,27 @@
* limitations under the License.
*/
-package com.pig4cloud.pig.common.security.feign;
+package com.pig4cloud.pig.common.feign;
-import feign.RequestInterceptor;
+import com.pig4cloud.pig.common.feign.retry.FeignRetryAspect;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
-import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.retry.support.RetryTemplate;
-public class PigFeignClientConfiguration {
+/**
+ * 重试配置
+ *
+ * @author lengleng
+ * @date 2023年03月09日
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnClass(RetryTemplate.class)
+public class PigFeignRetryAutoConfiguration {
- /**
- * 注入 oauth2 feign token 增强
- * @param tokenResolver token获取处理器
- * @return 拦截器
- */
@Bean
- public RequestInterceptor oauthRequestInterceptor(BearerTokenResolver tokenResolver) {
- return new PigOAuthRequestInterceptor(tokenResolver);
+ public FeignRetryAspect feignRetryAspect() {
+ return new FeignRetryAspect();
}
}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/Backoff.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/Backoff.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c4260d96e7a97487828adb03ab84155fe838895
--- /dev/null
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/Backoff.java
@@ -0,0 +1,21 @@
+package com.pig4cloud.pig.common.feign.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 重试具体的策略
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Backoff {
+
+ long delay() default 1000L;
+
+ long maxDelay() default 0L;
+
+ double multiplier() default 0.0D;
+
+}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/FeignRetry.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/FeignRetry.java
new file mode 100644
index 0000000000000000000000000000000000000000..846d09a3938a968ba6f5ad1a5522e8fad9f3544e
--- /dev/null
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/FeignRetry.java
@@ -0,0 +1,21 @@
+package com.pig4cloud.pig.common.feign.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 重试注解,作用在 @FeignClient 注解之上
+ */
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface FeignRetry {
+
+ Backoff backoff() default @Backoff();
+
+ int maxAttempt() default 3;
+
+ Class extends Throwable>[] include() default {};
+
+}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/retry/FeignRetryAspect.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/retry/FeignRetryAspect.java
new file mode 100644
index 0000000000000000000000000000000000000000..3119b7c06d5a92d85ba0b50d48523316e79dd73e
--- /dev/null
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/retry/FeignRetryAspect.java
@@ -0,0 +1,92 @@
+package com.pig4cloud.pig.common.feign.retry;
+
+import com.pig4cloud.pig.common.feign.annotation.FeignRetry;
+import feign.RetryableException;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.retry.backoff.BackOffPolicy;
+import org.springframework.retry.backoff.ExponentialBackOffPolicy;
+import org.springframework.retry.backoff.FixedBackOffPolicy;
+import org.springframework.retry.policy.SimpleRetryPolicy;
+import org.springframework.retry.support.RetryTemplate;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * FeignRetry 注解切面注入 retryTemplate
+ *
+ * @author lengleng
+ * @date 2023/1/21
+ * {@link org.springframework.cloud.loadbalancer.blocking.retry.BlockingLoadBalancedRetryPolicy}.
+ */
+@Slf4j
+@Aspect
+public class FeignRetryAspect {
+
+ @Around("@annotation(feignRetry)")
+ public Object retry(ProceedingJoinPoint joinPoint, FeignRetry feignRetry) throws Throwable {
+ Method method = getCurrentMethod(joinPoint);
+
+ RetryTemplate retryTemplate = new RetryTemplate();
+ retryTemplate.setBackOffPolicy(prepareBackOffPolicy(feignRetry));
+ retryTemplate.setRetryPolicy(prepareSimpleRetryPolicy(feignRetry));
+
+ // 重试
+ return retryTemplate.execute(arg0 -> {
+ int retryCount = arg0.getRetryCount();
+ log.info("Sending request method: {}, max attempt: {}, delay: {}, retryCount: {}", method.getName(),
+ feignRetry.maxAttempt(), feignRetry.backoff().delay(), retryCount);
+ return joinPoint.proceed(joinPoint.getArgs());
+ });
+ }
+
+ /**
+ * 构造重试策略
+ * @param feignRetry 重试注解
+ * @return BackOffPolicy
+ */
+ private BackOffPolicy prepareBackOffPolicy(FeignRetry feignRetry) {
+ if (feignRetry.backoff().multiplier() != 0) {
+ ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
+ backOffPolicy.setInitialInterval(feignRetry.backoff().delay());
+ backOffPolicy.setMaxInterval(feignRetry.backoff().maxDelay());
+ backOffPolicy.setMultiplier(feignRetry.backoff().multiplier());
+ return backOffPolicy;
+ }
+ else {
+ FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
+ fixedBackOffPolicy.setBackOffPeriod(feignRetry.backoff().delay());
+ return fixedBackOffPolicy;
+ }
+ }
+
+ /**
+ * 构造重试策略
+ * @param feignRetry 重试注解
+ * @return SimpleRetryPolicy
+ */
+ private SimpleRetryPolicy prepareSimpleRetryPolicy(FeignRetry feignRetry) {
+ Map, Boolean> policyMap = new HashMap<>();
+ policyMap.put(RetryableException.class, true); // Connection refused or time out
+
+ if (feignRetry.include().length != 0) {
+ for (Class extends Throwable> t : feignRetry.include()) {
+ policyMap.put(t, true);
+ }
+ }
+
+ return new SimpleRetryPolicy(feignRetry.maxAttempt(), policyMap, true);
+ }
+
+ private Method getCurrentMethod(JoinPoint joinPoint) {
+ MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+ return signature.getMethod();
+ }
+
+}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
index 474ff71751ecc7412e9c351f0bb80d7dc7fe71ad..3a6e7ea40805185508aba7eb679dbf540747e49a 100644
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
@@ -106,8 +106,8 @@ public final class PigSentinelFeign {
private Object getFromContext(String name, String type, Class> fallbackType, Class> targetType) {
Object fallbackInstance = feignContext.getInstance(name, fallbackType);
if (fallbackInstance == null) {
- throw new IllegalStateException(String.format(
- "No %s instance of type %s found for feign client %s", type, fallbackType, name));
+ throw new IllegalStateException(String
+ .format("No %s instance of type %s found for feign client %s", type, fallbackType, name));
}
if (!targetType.isAssignableFrom(fallbackType)) {
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
index da0afb5be5ca8fb97b416c2f107ecd4afe397d9c..d1bf4270c5cfe0e96c0e1ccc8e2312b8a76821d4 100644
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
@@ -25,12 +25,14 @@ import com.alibaba.csp.sentinel.Tracer;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.pig4cloud.pig.common.core.util.R;
+import com.pig4cloud.pig.common.feign.annotation.FeignRetry;
import feign.Feign;
import feign.InvocationHandlerFactory;
import feign.MethodMetadata;
import feign.Target;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.core.annotation.AnnotationUtils;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
@@ -38,6 +40,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Objects;
import static feign.Util.checkNotNull;
@@ -101,7 +104,7 @@ public class PigSentinelInvocationHandler implements InvocationHandler {
if (target instanceof Target.HardCodedTarget) {
Target.HardCodedTarget> hardCodedTarget = (Target.HardCodedTarget) target;
MethodMetadata methodMetadata = SentinelContractHolder.METADATA_MAP
- .get(hardCodedTarget.type().getName() + Feign.configKey(hardCodedTarget.type(), method));
+ .get(hardCodedTarget.type().getName() + Feign.configKey(hardCodedTarget.type(), method));
// resource default is HttpMethod:protocol://url
if (methodMetadata == null) {
result = methodHandler.invoke(args);
@@ -134,8 +137,9 @@ public class PigSentinelInvocationHandler implements InvocationHandler {
}
}
else {
- // 若是R类型 执行自动降级返回R
- if (R.class == method.getReturnType()) {
+ // 若是R类型 并且不包含@FeignRetry 执行自动降级返回R
+ FeignRetry feignRetry = AnnotationUtils.findAnnotation(method, FeignRetry.class);
+ if (R.class == method.getReturnType() && Objects.isNull(feignRetry)) {
log.error("feign 服务间调用异常", ex);
return R.failed(ex.getLocalizedMessage());
}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
index 89bad6202e4411ad085fb817a1bdc532eecb8474..3dccbf3c8cf1cc317185000e523cec14eb459f96 100644
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
@@ -88,8 +88,8 @@ public class GlobalBizExceptionHandler {
@ExceptionHandler(AccessDeniedException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public R handleAccessDeniedException(AccessDeniedException e) {
- String msg = SpringSecurityMessageSource.getAccessor().getMessage("AbstractAccessDecisionManager.accessDenied",
- e.getMessage());
+ String msg = SpringSecurityMessageSource.getAccessor()
+ .getMessage("AbstractAccessDecisionManager.accessDenied", e.getMessage());
log.warn("拒绝授权异常信息 ex={}", msg);
return R.failed(e.getLocalizedMessage());
}
diff --git a/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java b/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
index 8230d93d126f46ff91c12c331d210b5c54a7f2eb..55d495c1dec0de3174df25f397dafcff90b3a43b 100644
--- a/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
+++ b/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
@@ -91,7 +91,7 @@ public class PigFeignClientsRegistrar implements ImportBeanDefinitionRegistrar,
validate(attributes);
BeanDefinitionBuilder definition = BeanDefinitionBuilder
- .genericBeanDefinition(FeignClientFactoryBean.class);
+ .genericBeanDefinition(FeignClientFactoryBean.class);
definition.addPropertyValue("url", getUrl(attributes));
definition.addPropertyValue("path", getPath(attributes));
String name = getName(attributes);
diff --git a/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index caa9f52f81845862d2d50099a0f81490d7181746..4531157b81ddec1988699b235d2d9b11f6461dab 100644
--- a/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,4 @@
com.pig4cloud.pig.common.feign.PigFeignAutoConfiguration
+com.pig4cloud.pig.common.feign.PigFeignRetryAutoConfiguration
com.pig4cloud.pig.common.feign.sentinel.SentinelAutoConfiguration
com.pig4cloud.pig.common.feign.sentinel.handle.GlobalBizExceptionHandler
diff --git a/pig-common/pig-common-job/pom.xml b/pig-common/pig-common-job/pom.xml
index 1a12427d4b4395c3955038932bd9acc2f701a900..6c5b166af517a26068015df51626d8a3fc424653 100755
--- a/pig-common/pig-common-job/pom.xml
+++ b/pig-common/pig-common-job/pom.xml
@@ -23,7 +23,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-job
diff --git a/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java b/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java
index 0555aadb6fe1eb501325c5a83482d2fa6d834a1d..e162c0f1f0201788ffecc2d0114b790fda180a22 100644
--- a/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java
+++ b/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java
@@ -61,10 +61,13 @@ public class XxlJobAutoConfiguration {
// 如果配置为空则获取注册中心的服务列表 "http://pig-xxl:9080/xxl-job-admin"
if (!StringUtils.hasText(xxlJobProperties.getAdmin().getAddresses())) {
- String serverList = discoveryClient.getServices().stream().filter(s -> s.contains(XXL_JOB_ADMIN))
- .flatMap(s -> discoveryClient.getInstances(s).stream()).map(instance -> String
- .format("http://%s:%s/%s", instance.getHost(), instance.getPort(), XXL_JOB_ADMIN))
- .collect(Collectors.joining(","));
+ String serverList = discoveryClient.getServices()
+ .stream()
+ .filter(s -> s.contains(XXL_JOB_ADMIN))
+ .flatMap(s -> discoveryClient.getInstances(s).stream())
+ .map(instance -> String.format("http://%s:%s/%s", instance.getHost(), instance.getPort(),
+ XXL_JOB_ADMIN))
+ .collect(Collectors.joining(","));
xxlJobSpringExecutor.setAdminAddresses(serverList);
}
else {
diff --git a/pig-common/pig-common-log/pom.xml b/pig-common/pig-common-log/pom.xml
index 83acf4c35bb9551b3adaf24b7cf40db93f52b3b4..b01f6f3849ea31e7ae66748d46125e480f94e79c 100755
--- a/pig-common/pig-common-log/pom.xml
+++ b/pig-common/pig-common-log/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-log
@@ -54,5 +54,9 @@
org.springframework.security
spring-security-core
+
+ org.springframework.security
+ spring-security-oauth2-core
+
diff --git a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
index 4d980646b574753332e6d0febecfe1c05f3a572e..6046cfe9703fbd2afa042286c4b3452b8b3efc4d 100755
--- a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
+++ b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
@@ -16,10 +16,12 @@
package com.pig4cloud.pig.common.log.util;
+import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpUtil;
import com.pig4cloud.pig.admin.api.entity.SysLog;
+import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import lombok.experimental.UtilityClass;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
@@ -29,6 +31,7 @@ import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.http.HttpHeaders;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -46,7 +49,7 @@ public class SysLogUtils {
public SysLog getSysLog() {
HttpServletRequest request = ((ServletRequestAttributes) Objects
- .requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+ .requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
SysLog sysLog = new SysLog();
sysLog.setType(LogTypeEnum.NORMAL.getType());
sysLog.setRemoteAddr(ServletUtil.getClientIP(request));
@@ -56,9 +59,28 @@ public class SysLogUtils {
sysLog.setParams(HttpUtil.toParams(request.getParameterMap()));
sysLog.setCreateBy(getUsername());
sysLog.setUpdateBy(getUsername());
+ sysLog.setServiceId(getClientId());
return sysLog;
}
+ /**
+ * 获取客户端
+ * @return clientId
+ */
+ private String getClientId() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication == null) {
+ return null;
+ }
+
+ Object principal = authentication.getPrincipal();
+ if (principal instanceof OAuth2AuthenticatedPrincipal) {
+ OAuth2AuthenticatedPrincipal auth2Authentication = (OAuth2AuthenticatedPrincipal) principal;
+ return MapUtil.getStr(auth2Authentication.getAttributes(), SecurityConstants.CLIENT_ID);
+ }
+ return null;
+ }
+
/**
* 获取用户名称
* @return username
diff --git a/pig-common/pig-common-mybatis/pom.xml b/pig-common/pig-common-mybatis/pom.xml
index 84c3a56f92980931a8187e4da4a6e0743b8276df..c2d0b5dafcecbdeb43d08cf34cede1ec10fb1ade 100755
--- a/pig-common/pig-common-mybatis/pom.xml
+++ b/pig-common/pig-common-mybatis/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-mybatis
diff --git a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
index 5084471d1ab443a98860545609d9c121409e97ea..683b13e072828740a031f9eaca0f794fbddb529e 100644
--- a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
+++ b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
@@ -88,10 +88,12 @@ public class SqlFilterArgumentResolver implements HandlerMethodArgumentResolver
}
List orderItemList = new ArrayList<>();
- Optional.ofNullable(ascs).ifPresent(s -> orderItemList.addAll(
- Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::asc).collect(Collectors.toList())));
- Optional.ofNullable(descs).ifPresent(s -> orderItemList.addAll(
- Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::desc).collect(Collectors.toList())));
+ Optional.ofNullable(ascs)
+ .ifPresent(s -> orderItemList.addAll(
+ Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::asc).collect(Collectors.toList())));
+ Optional.ofNullable(descs)
+ .ifPresent(s -> orderItemList.addAll(
+ Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::desc).collect(Collectors.toList())));
page.addOrder(orderItemList);
return page;
diff --git a/pig-common/pig-common-seata/pom.xml b/pig-common/pig-common-seata/pom.xml
index 6b80cb4ae6d8ec578448bea1e596425c856aa0f6..d227a7fc819693ce37906a3284e5945245f272a0 100755
--- a/pig-common/pig-common-seata/pom.xml
+++ b/pig-common/pig-common-seata/pom.xml
@@ -23,7 +23,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-seata
diff --git a/pig-common/pig-common-security/pom.xml b/pig-common/pig-common-security/pom.xml
index 469aa634a797c258d6575b72f5e0b033bf4bc326..46652e783619cb38bf5c795aff4ec7bb09770e64 100755
--- a/pig-common/pig-common-security/pom.xml
+++ b/pig-common/pig-common-security/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-security
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java
index 806cbea8437f481aff9539b8f1379fc647a72f82..3dbbd0c6609a4cdfa5139d8f74c3f839dcb028f6 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java
@@ -18,7 +18,6 @@ package com.pig4cloud.pig.common.security.annotation;
import com.pig4cloud.pig.common.security.component.PigResourceServerAutoConfiguration;
import com.pig4cloud.pig.common.security.component.PigResourceServerConfiguration;
-import com.pig4cloud.pig.common.security.feign.PigFeignClientConfiguration;
import org.springframework.context.annotation.Import;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@@ -35,8 +34,7 @@ import java.lang.annotation.*;
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@EnableGlobalMethodSecurity(prePostEnabled = true)
-@Import({ PigResourceServerAutoConfiguration.class, PigResourceServerConfiguration.class,
- PigFeignClientConfiguration.class })
+@Import({ PigResourceServerAutoConfiguration.class, PigResourceServerConfiguration.class })
public @interface EnablePigResourceServer {
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
index fcf394a4746678470ca80dc3a28cb215d8e46d85..5bef7ab3580f0fba167947bded01dc5c0b8ad744 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
@@ -46,8 +46,10 @@ public class PermissionService {
return false;
}
Collection extends GrantedAuthority> authorities = authentication.getAuthorities();
- return authorities.stream().map(GrantedAuthority::getAuthority).filter(StringUtils::hasText)
- .anyMatch(x -> PatternMatchUtils.simpleMatch(permissions, x));
+ return authorities.stream()
+ .map(GrantedAuthority::getAuthority)
+ .filter(StringUtils::hasText)
+ .anyMatch(x -> PatternMatchUtils.simpleMatch(permissions, x));
}
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
index 3e8aae220de3499d77a2e47230ee2d5291c5eeaf..f6f068cba94ac7f49bfd292b12233568ca26753e 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
@@ -61,13 +61,17 @@ public class PermitAllUrlProperties implements InitializingBean {
// 获取方法上边的注解 替代path variable 为 *
Inner method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Inner.class);
- Optional.ofNullable(method).ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
- .getPatternValues().forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
+ Optional.ofNullable(method)
+ .ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
+ .getPatternValues()
+ .forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
// 获取类上边的注解, 替代path variable 为 *
Inner controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Inner.class);
- Optional.ofNullable(controller).ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
- .getPatternValues().forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
+ Optional.ofNullable(controller)
+ .ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
+ .getPatternValues()
+ .forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
});
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
index 47353cf9e8e08f9f7c197aa8fdaa8272c1895307..9868c7b18419af4f505f5a8c7cd52248bb36dca3 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
@@ -55,8 +55,9 @@ public class PigBearerTokenExtractor implements BearerTokenResolver {
@Override
public String resolve(HttpServletRequest request) {
- boolean match = urlProperties.getUrls().stream()
- .anyMatch(url -> pathMatcher.match(url, request.getRequestURI()));
+ boolean match = urlProperties.getUrls()
+ .stream()
+ .anyMatch(url -> pathMatcher.match(url, request.getRequestURI()));
if (match) {
return null;
@@ -68,7 +69,7 @@ public class PigBearerTokenExtractor implements BearerTokenResolver {
if (authorizationHeaderToken != null) {
if (parameterToken != null) {
final BearerTokenError error = BearerTokenErrors
- .invalidRequest("Found multiple bearer tokens in the request");
+ .invalidRequest("Found multiple bearer tokens in the request");
throw new OAuth2AuthenticationException(error);
}
return authorizationHeaderToken;
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java
deleted file mode 100644
index 9765be356e17fbfa1a38b66fa1fe11ac143baab6..0000000000000000000000000000000000000000
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.pig4cloud.pig.common.security.component;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * @author lengleng
- * @date 2022/7/6
- *
- * credential 支持客户端模式的用户存储
- */
-@RequiredArgsConstructor
-public class PigClientCredentialsOAuth2AuthenticatedPrincipal implements OAuth2AuthenticatedPrincipal {
-
- private final Map attributes;
-
- private final Collection authorities;
-
- private final String name;
-
- @Override
- public Map getAttributes() {
- return this.attributes;
- }
-
- @Override
- public Collection extends GrantedAuthority> getAuthorities() {
- return this.authorities;
- }
-
- @Override
- public String getName() {
- return this.name;
- }
-
-}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
index d250f389ef02db6de362f98b7e5ccd926f2fea15..96148d10697ebef08a9318e5d6c48fa6ace7b7d5 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
@@ -1,6 +1,7 @@
package com.pig4cloud.pig.common.security.component;
import cn.hutool.extra.spring.SpringUtil;
+import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.security.service.PigUser;
import com.pig4cloud.pig.common.security.service.PigUserDetailsService;
import lombok.RequiredArgsConstructor;
@@ -11,6 +12,7 @@ import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
+import org.springframework.security.oauth2.core.DefaultOAuth2AuthenticatedPrincipal;
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
@@ -43,17 +45,18 @@ public class PigCustomOpaqueTokenIntrospector implements OpaqueTokenIntrospector
// 客户端模式默认返回
if (AuthorizationGrantType.CLIENT_CREDENTIALS.equals(oldAuthorization.getAuthorizationGrantType())) {
- return new PigClientCredentialsOAuth2AuthenticatedPrincipal(oldAuthorization.getAttributes(),
- AuthorityUtils.NO_AUTHORITIES, oldAuthorization.getPrincipalName());
+ return new DefaultOAuth2AuthenticatedPrincipal(oldAuthorization.getPrincipalName(),
+ oldAuthorization.getAttributes(), AuthorityUtils.NO_AUTHORITIES);
}
Map userDetailsServiceMap = SpringUtil
- .getBeansOfType(PigUserDetailsService.class);
+ .getBeansOfType(PigUserDetailsService.class);
- Optional optional = userDetailsServiceMap.values().stream()
- .filter(service -> service.support(Objects.requireNonNull(oldAuthorization).getRegisteredClientId(),
- oldAuthorization.getAuthorizationGrantType().getValue()))
- .max(Comparator.comparingInt(Ordered::getOrder));
+ Optional optional = userDetailsServiceMap.values()
+ .stream()
+ .filter(service -> service.support(Objects.requireNonNull(oldAuthorization).getRegisteredClientId(),
+ oldAuthorization.getAuthorizationGrantType().getValue()))
+ .max(Comparator.comparingInt(Ordered::getOrder));
UserDetails userDetails = null;
try {
@@ -69,7 +72,13 @@ public class PigCustomOpaqueTokenIntrospector implements OpaqueTokenIntrospector
catch (Exception ex) {
log.error("资源服务器 introspect Token error {}", ex.getLocalizedMessage());
}
- return (PigUser) userDetails;
+
+ // 注入扩展属性,方便上下文获取客户端ID
+ PigUser user = (PigUser) userDetails;
+ Objects.requireNonNull(user)
+ .getAttributes()
+ .put(SecurityConstants.CLIENT_ID, oldAuthorization.getRegisteredClientId());
+ return user;
}
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigOAuthRequestInterceptor.java
similarity index 92%
rename from pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java
rename to pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigOAuthRequestInterceptor.java
index 597ac3625bfe4c2cbb3179ab1ea001b47f5e3084..edb5812f9336aacfa056fcb7f9175cc6ac9c4837 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigOAuthRequestInterceptor.java
@@ -1,7 +1,7 @@
-package com.pig4cloud.pig.common.security.feign;
+package com.pig4cloud.pig.common.security.component;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.util.WebUtils;
import feign.RequestInterceptor;
@@ -52,7 +52,7 @@ public class PigOAuthRequestInterceptor implements RequestInterceptor {
HttpServletRequest request = WebUtils.getRequest().get();
// 避免请求参数的 query token 无法传递
String token = tokenResolver.resolve(request);
- if (StrUtil.isBlank(token)) {
+ if (StringUtils.isBlank(token)) {
return;
}
template.header(HttpHeaders.AUTHORIZATION,
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
index 3aac75ace6ff6d94eca6835af8faa213d8727fcf..9016c4dd47f4e37a848cad01ee5c9e4cb28becf6 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
@@ -17,12 +17,14 @@
package com.pig4cloud.pig.common.security.component;
import com.fasterxml.jackson.databind.ObjectMapper;
+import feign.RequestInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
+import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
/**
* @author lengleng
@@ -73,4 +75,14 @@ public class PigResourceServerAutoConfiguration {
return new PigCustomOpaqueTokenIntrospector(authorizationService);
}
+ /**
+ * 注入 oauth2 feign token 增强
+ * @param tokenResolver token获取处理器
+ * @return 拦截器
+ */
+ @Bean
+ public RequestInterceptor oauthRequestInterceptor(BearerTokenResolver tokenResolver) {
+ return new PigOAuthRequestInterceptor(tokenResolver);
+ }
+
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
index 4e5a2c296a14a951699af9458ee35aea06706767..c2ca9b80eaee21815e50a2ef4f25ee97d48e0e90 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
@@ -51,13 +51,20 @@ public class PigResourceServerConfiguration {
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests(authorizeRequests -> authorizeRequests
- .antMatchers(ArrayUtil.toArray(permitAllUrl.getUrls(), String.class)).permitAll().anyRequest()
- .authenticated())
- .oauth2ResourceServer(
- oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
- .authenticationEntryPoint(resourceAuthExceptionEntryPoint)
- .bearerTokenResolver(pigBearerTokenExtractor))
- .headers().frameOptions().disable().and().csrf().disable();
+ .antMatchers(ArrayUtil.toArray(permitAllUrl.getUrls(), String.class))
+ .permitAll()
+ .anyRequest()
+ .authenticated())
+ .oauth2ResourceServer(
+ oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
+ .authenticationEntryPoint(resourceAuthExceptionEntryPoint)
+ .bearerTokenResolver(pigBearerTokenExtractor))
+ .headers()
+ .frameOptions()
+ .disable()
+ .and()
+ .csrf()
+ .disable();
return http.build();
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
index ddae78468d3ca723b240edea7f3221668d07f423..6d55f61eb7e2b46b80dae1a82fb207c1a3c9f0ac 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
@@ -48,12 +48,13 @@ public class PigSecurityInnerAspect implements Ordered {
@Around("@within(inner) || @annotation(inner)")
public Object around(ProceedingJoinPoint point, Inner inner) {
// 实际注入的inner实体由表达式后一个注解决定,即是方法上的@Inner注解实体,若方法上无@Inner注解,则获取类上的
- if (inner == null) {
- Class> clazz = point.getTarget().getClass();
- inner = AnnotationUtils.findAnnotation(clazz, Inner.class);
- }
+ // 这段代码没有意义,拦截的就是@Inner注解,怎么会为null呢
+ // if (inner == null) {
+ // Class> clazz = point.getTarget().getClass();
+ // inner = AnnotationUtils.findAnnotation(clazz, Inner.class);
+ // }
String header = request.getHeader(SecurityConstants.FROM);
- if (inner.value() && !StrUtil.equals(SecurityConstants.FROM_IN, header)) {
+ if (inner.value() && !SecurityConstants.FROM_IN.equals(header)) {
log.warn("访问接口 {} 没有权限", point.getSignature().getName());
throw new AccessDeniedException("Access is denied");
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
index 64e9194010a6e225d6f93e2a0b308852a8a6ed64..df83102f87e5e6bf6fe5382b77485497bca0dff5 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
@@ -19,8 +19,8 @@ public class PigRedisOAuth2AuthorizationConsentService implements OAuth2Authoriz
public void save(OAuth2AuthorizationConsent authorizationConsent) {
Assert.notNull(authorizationConsent, "authorizationConsent cannot be null");
- redisTemplate.opsForValue().set(buildKey(authorizationConsent), authorizationConsent, TIMEOUT,
- TimeUnit.MINUTES);
+ redisTemplate.opsForValue()
+ .set(buildKey(authorizationConsent), authorizationConsent, TIMEOUT, TimeUnit.MINUTES);
}
@@ -35,7 +35,7 @@ public class PigRedisOAuth2AuthorizationConsentService implements OAuth2Authoriz
Assert.hasText(registeredClientId, "registeredClientId cannot be empty");
Assert.hasText(principalName, "principalName cannot be empty");
return (OAuth2AuthorizationConsent) redisTemplate.opsForValue()
- .get(buildKey(registeredClientId, principalName));
+ .get(buildKey(registeredClientId, principalName));
}
private static String buildKey(String registeredClientId, String principalName) {
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
index 7ba2a2255a6c7fba3b42fbbf8a7f622921f2fd27..db7c6b1b0353e0b2ae886703166489d5e014e281 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
@@ -37,37 +37,40 @@ public class PigRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
Assert.notNull(authorization, "authorization cannot be null");
if (isState(authorization)) {
- String token = authorization.getAttribute("state");
+ String token = authorization.getAttribute(OAuth2ParameterNames.STATE);
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.STATE, token), authorization, TIMEOUT,
- TimeUnit.MINUTES);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.STATE, token), authorization, TIMEOUT, TimeUnit.MINUTES);
}
if (isCode(authorization)) {
OAuth2Authorization.Token authorizationCode = authorization
- .getToken(OAuth2AuthorizationCode.class);
+ .getToken(OAuth2AuthorizationCode.class);
OAuth2AuthorizationCode authorizationCodeToken = authorizationCode.getToken();
long between = ChronoUnit.MINUTES.between(authorizationCodeToken.getIssuedAt(),
authorizationCodeToken.getExpiresAt());
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()),
- authorization, between, TimeUnit.MINUTES);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()), authorization,
+ between, TimeUnit.MINUTES);
}
if (isRefreshToken(authorization)) {
OAuth2RefreshToken refreshToken = authorization.getRefreshToken().getToken();
long between = ChronoUnit.SECONDS.between(refreshToken.getIssuedAt(), refreshToken.getExpiresAt());
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.REFRESH_TOKEN, refreshToken.getTokenValue()),
- authorization, between, TimeUnit.SECONDS);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.REFRESH_TOKEN, refreshToken.getTokenValue()), authorization, between,
+ TimeUnit.SECONDS);
}
if (isAccessToken(authorization)) {
OAuth2AccessToken accessToken = authorization.getAccessToken().getToken();
long between = ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt());
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()),
- authorization, between, TimeUnit.SECONDS);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()), authorization, between,
+ TimeUnit.SECONDS);
}
}
@@ -77,13 +80,13 @@ public class PigRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
List keys = new ArrayList<>();
if (isState(authorization)) {
- String token = authorization.getAttribute("state");
+ String token = authorization.getAttribute(OAuth2ParameterNames.STATE);
keys.add(buildKey(OAuth2ParameterNames.STATE, token));
}
if (isCode(authorization)) {
OAuth2Authorization.Token authorizationCode = authorization
- .getToken(OAuth2AuthorizationCode.class);
+ .getToken(OAuth2AuthorizationCode.class);
OAuth2AuthorizationCode authorizationCodeToken = authorizationCode.getToken();
keys.add(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()));
}
@@ -120,12 +123,12 @@ public class PigRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
}
private static boolean isState(OAuth2Authorization authorization) {
- return Objects.nonNull(authorization.getAttribute("state"));
+ return Objects.nonNull(authorization.getAttribute(OAuth2ParameterNames.STATE));
}
private static boolean isCode(OAuth2Authorization authorization) {
OAuth2Authorization.Token authorizationCode = authorization
- .getToken(OAuth2AuthorizationCode.class);
+ .getToken(OAuth2AuthorizationCode.class);
return Objects.nonNull(authorizationCode);
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
index ee44bae16f4b7f817269f32298da27e9cd66ce27..65583c1e175f6e3718a124e9c32ca6eb35417fb0 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
@@ -87,38 +87,48 @@ public class PigRemoteRegisteredClientRepository implements RegisteredClientRepo
@Cacheable(value = CacheConstants.CLIENT_DETAILS_KEY, key = "#clientId", unless = "#result == null")
public RegisteredClient findByClientId(String clientId) {
- SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId)).getData()
- .orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
- new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
+ SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId))
+ .getData()
+ .orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
+ new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
RegisteredClient.Builder builder = RegisteredClient.withId(clientDetails.getClientId())
- .clientId(clientDetails.getClientId())
- .clientSecret(SecurityConstants.NOOP + clientDetails.getClientSecret())
- .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
+ .clientId(clientDetails.getClientId())
+ .clientSecret(SecurityConstants.NOOP + clientDetails.getClientSecret())
+ .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST)
+ .clientAuthenticationMethods(clientAuthenticationMethods -> {
+ clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
+ clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_POST);
+ });
// 授权模式
Optional.ofNullable(clientDetails.getAuthorizedGrantTypes())
- .ifPresent(grants -> StringUtils.commaDelimitedListToSet(grants)
- .forEach(s -> builder.authorizationGrantType(new AuthorizationGrantType(s))));
+ .ifPresent(grants -> StringUtils.commaDelimitedListToSet(grants)
+ .forEach(s -> builder.authorizationGrantType(new AuthorizationGrantType(s))));
// 回调地址
- Optional.ofNullable(clientDetails.getWebServerRedirectUri()).ifPresent(redirectUri -> Arrays
- .stream(redirectUri.split(StrUtil.COMMA)).filter(StrUtil::isNotBlank).forEach(builder::redirectUri));
+ Optional.ofNullable(clientDetails.getWebServerRedirectUri())
+ .ifPresent(redirectUri -> Arrays.stream(redirectUri.split(StrUtil.COMMA))
+ .filter(StrUtil::isNotBlank)
+ .forEach(builder::redirectUri));
// scope
- Optional.ofNullable(clientDetails.getScope()).ifPresent(
- scope -> Arrays.stream(scope.split(StrUtil.COMMA)).filter(StrUtil::isNotBlank).forEach(builder::scope));
+ Optional.ofNullable(clientDetails.getScope())
+ .ifPresent(scope -> Arrays.stream(scope.split(StrUtil.COMMA))
+ .filter(StrUtil::isNotBlank)
+ .forEach(builder::scope));
return builder
- .tokenSettings(TokenSettings.builder().accessTokenFormat(OAuth2TokenFormat.REFERENCE)
- .accessTokenTimeToLive(Duration.ofSeconds(Optional
- .ofNullable(clientDetails.getAccessTokenValidity()).orElse(accessTokenValiditySeconds)))
- .refreshTokenTimeToLive(
- Duration.ofSeconds(Optional.ofNullable(clientDetails.getRefreshTokenValidity())
- .orElse(refreshTokenValiditySeconds)))
- .build())
- .clientSettings(ClientSettings.builder()
- .requireAuthorizationConsent(!BooleanUtil.toBoolean(clientDetails.getAutoapprove())).build())
- .build();
+ .tokenSettings(TokenSettings.builder()
+ .accessTokenFormat(OAuth2TokenFormat.REFERENCE)
+ .accessTokenTimeToLive(Duration.ofSeconds(
+ Optional.ofNullable(clientDetails.getAccessTokenValidity()).orElse(accessTokenValiditySeconds)))
+ .refreshTokenTimeToLive(Duration.ofSeconds(Optional.ofNullable(clientDetails.getRefreshTokenValidity())
+ .orElse(refreshTokenValiditySeconds)))
+ .build())
+ .clientSettings(ClientSettings.builder()
+ .requireAuthorizationConsent(!BooleanUtil.toBoolean(clientDetails.getAutoapprove()))
+ .build())
+ .build();
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
index 36f48f9e81da48dda47ca12fb54ca780a140627f..723ac02daadeed39a31ba7d7a4a848efc143bf77 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
@@ -36,6 +36,8 @@ public class PigUser extends User implements OAuth2AuthenticatedPrincipal {
private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
+ private final Map attributes = new HashMap<>();
+
/**
* 用户ID
*/
@@ -71,7 +73,7 @@ public class PigUser extends User implements OAuth2AuthenticatedPrincipal {
*/
@Override
public Map getAttributes() {
- return new HashMap<>();
+ return this.attributes;
}
@Override
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
index 53202225ce7a15f607a0f2ff12577b032fb81c05..4b33f304b8b201b0b5f1642288d910b30a07c615 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
@@ -62,7 +62,7 @@ public interface PigUserDetailsService extends UserDetailsService, Ordered {
}
Collection authorities = AuthorityUtils
- .createAuthorityList(dbAuthsSet.toArray(new String[0]));
+ .createAuthorityList(dbAuthsSet.toArray(new String[0]));
SysUser user = info.getSysUser();
// 构造security用户
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
index 4ff9c03a44729b5db9f4383bf2d79e4c6301064e..017cf3f0ad715abfc2afa58362fdda3b7698caa5 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
@@ -28,10 +28,8 @@ public class OAuth2EndpointUtils {
Map parameterMap = request.getParameterMap();
MultiValueMap parameters = new LinkedMultiValueMap<>(parameterMap.size());
parameterMap.forEach((key, values) -> {
- if (values.length > 0) {
- for (String value : values) {
- parameters.add(key, value);
- }
+ for (String value : values) {
+ parameters.add(key, value);
}
});
return parameters;
@@ -39,7 +37,7 @@ public class OAuth2EndpointUtils {
public boolean matchesPkceTokenRequest(HttpServletRequest request) {
return AuthorizationGrantType.AUTHORIZATION_CODE.getValue()
- .equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE))
+ .equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE))
&& request.getParameter(OAuth2ParameterNames.CODE) != null
&& request.getParameter(PkceParameterNames.CODE_VERIFIER) != null;
}
@@ -63,7 +61,8 @@ public class OAuth2EndpointUtils {
OAuth2RefreshToken refreshToken = authentication.getRefreshToken().getToken();
OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue())
- .tokenType(accessToken.getTokenType()).scopes(accessToken.getScopes());
+ .tokenType(accessToken.getTokenType())
+ .scopes(accessToken.getScopes());
if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
index 292636ec9003c6e532b9ad632c2aeebe4ff86ec5..de5368e00179a10f8158c3b689bf84609318f16b 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
@@ -16,6 +16,7 @@
package com.pig4cloud.pig.common.security.util;
+import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.security.service.PigUser;
@@ -74,11 +75,12 @@ public class SecurityUtils {
Collection extends GrantedAuthority> authorities = authentication.getAuthorities();
List roleIds = new ArrayList<>();
- authorities.stream().filter(granted -> StrUtil.startWith(granted.getAuthority(), SecurityConstants.ROLE))
- .forEach(granted -> {
- String id = StrUtil.removePrefix(granted.getAuthority(), SecurityConstants.ROLE);
- roleIds.add(Long.parseLong(id));
- });
+ authorities.stream()
+ .filter(granted -> CharSequenceUtil.startWith(granted.getAuthority(), SecurityConstants.ROLE))
+ .forEach(granted -> {
+ String id = CharSequenceUtil.removePrefix(granted.getAuthority(), SecurityConstants.ROLE);
+ roleIds.add(Long.parseLong(id));
+ });
return roleIds;
}
diff --git a/pig-common/pig-common-swagger/pom.xml b/pig-common/pig-common-swagger/pom.xml
index 854dad1981850d04bf285ecc1bca0f6222826aa1..500159851984565dfaa708d6c9c0d4ddebfa745d 100644
--- a/pig-common/pig-common-swagger/pom.xml
+++ b/pig-common/pig-common-swagger/pom.xml
@@ -24,7 +24,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-swagger
diff --git a/pig-common/pig-common-xss/pom.xml b/pig-common/pig-common-xss/pom.xml
index 495cfe2b0d07adc277bafd4dd7a0e7eba46a070d..615fd489d6a94fb58ebdef71e90d3a2f043891c5 100755
--- a/pig-common/pig-common-xss/pom.xml
+++ b/pig-common/pig-common-xss/pom.xml
@@ -6,7 +6,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-xss
diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
index b5f7b88cb7d6bc38c5cdb252fb645691313d005e..2bf54e9b4b25c128d1c865983bc2040355c04bbc 100644
--- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
+++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
@@ -75,8 +75,10 @@ public class PigXssAutoConfiguration implements WebMvcConfigurer {
}
com.pig4cloud.pig.common.xss.core.XssCleanInterceptor interceptor = new com.pig4cloud.pig.common.xss.core.XssCleanInterceptor(
xssProperties);
- registry.addInterceptor(interceptor).addPathPatterns(patterns)
- .excludePathPatterns(xssProperties.getPathExcludePatterns()).order(Ordered.LOWEST_PRECEDENCE);
+ registry.addInterceptor(interceptor)
+ .addPathPatterns(patterns)
+ .excludePathPatterns(xssProperties.getPathExcludePatterns())
+ .order(Ordered.LOWEST_PRECEDENCE);
}
}
diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
index 338f2da314011f9a0a57d33c9e09e6e63de7ac1d..7be9a6ded4b35326064fba695ac4d77c5d695dbf 100644
--- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
+++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
@@ -40,10 +40,10 @@ public class DefaultXssCleaner implements XssCleaner {
private static Document.OutputSettings getOutputSettings(PigXssProperties properties) {
return new Document.OutputSettings()
- // 2. 转义,没找到关闭的方法,目前这个规则最少
- .escapeMode(Entities.EscapeMode.xhtml)
- // 3. 保留换行
- .prettyPrint(properties.isPrettyPrint());
+ // 2. 转义,没找到关闭的方法,目前这个规则最少
+ .escapeMode(Entities.EscapeMode.xhtml)
+ // 3. 保留换行
+ .prettyPrint(properties.isPrettyPrint());
}
@Override
diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
index 017b674945721b2c02265318d78bb4d31d20405b..128044e3662ac2a7a776785c04c49a2a76ecbe10 100644
--- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
+++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
@@ -23,6 +23,9 @@ package com.pig4cloud.pig.common.xss.core;
*/
public class XssHolder {
+ private XssHolder() {
+ }
+
private static final ThreadLocal TL = new ThreadLocal<>();
private static final ThreadLocal TL_IGNORE = new ThreadLocal<>();
diff --git a/pig-common/pom.xml b/pig-common/pom.xml
index 8c24c931cf5d05a9b4ef2a338edaf4ff1801c95a..15908dee575ff66780a7f6e44aa85fb16ed0922f 100755
--- a/pig-common/pom.xml
+++ b/pig-common/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-common
diff --git a/pig-gateway/pom.xml b/pig-gateway/pom.xml
index 7f625d7a15327f8b40d3fceb35154ea10574ca78..9e4ea2788b268cf1fe86e6754c4b8acf0d17be1c 100755
--- a/pig-gateway/pom.xml
+++ b/pig-gateway/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-gateway
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
index a3c595c790580fd4cd925e11d8dc1d1529f7371c..36cf7bf6cbc0a5b5363781ec36c464bd6caf189a 100755
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
@@ -38,8 +38,9 @@ public class RateLimiterConfiguration {
@Bean
public KeyResolver remoteAddrKeyResolver() {
return exchange -> Mono
- .just(Objects.requireNonNull(Objects.requireNonNull(exchange.getRequest().getRemoteAddress()))
- .getAddress().getHostAddress());
+ .just(Objects.requireNonNull(Objects.requireNonNull(exchange.getRequest().getRemoteAddress()))
+ .getAddress()
+ .getHostAddress());
}
}
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
index 16b3f658c1098aff816a2bd63e7573f919aed282..f432e1e6c8a339978e15fbe016334d32af7904dc 100755
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
@@ -65,8 +65,9 @@ public class PigRequestGlobalFilter implements GlobalFilter, Ordered {
// 2. 重写StripPrefix
addOriginalRequestUrl(exchange, request.getURI());
String rawPath = request.getURI().getRawPath();
- String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L)
- .collect(Collectors.joining("/"));
+ String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/"))
+ .skip(1L)
+ .collect(Collectors.joining("/"));
ServerHttpRequest newRequest = request.mutate().path(newPath).build();
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java
index e52e4c87b27480752ef7e0f61082af95093a4227..522d409343d118a1eed2ce05b6a119b24bb0761c 100644
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java
@@ -68,7 +68,7 @@ public class SwaggerBasicGatewayFilter implements GlobalFilter {
String password = swaggerProperties.getBasic().getPassword();
String encodeToString = Base64Utils
- .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
+ .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
return auth.equals(BASIC_PREFIX + encodeToString);
}
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java
index ee227a3dcba36ee8e19e644ad5cff66ee2fca3ce..d401497a1b9dbf9ad894b038dd195efa108095d6 100755
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java
@@ -59,15 +59,16 @@ public class ImageCodeHandler implements HandlerFunction {
// 保存验证码信息
Optional randomStr = serverRequest.queryParam("randomStr");
redisTemplate.setKeySerializer(new StringRedisSerializer());
- randomStr.ifPresent(s -> redisTemplate.opsForValue().set(CacheConstants.DEFAULT_CODE_KEY + s, result,
- SecurityConstants.CODE_TIME, TimeUnit.SECONDS));
+ randomStr.ifPresent(s -> redisTemplate.opsForValue()
+ .set(CacheConstants.DEFAULT_CODE_KEY + s, result, SecurityConstants.CODE_TIME, TimeUnit.SECONDS));
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
captcha.out(os);
- return ServerResponse.status(HttpStatus.OK).contentType(MediaType.IMAGE_JPEG)
- .body(BodyInserters.fromResource(new ByteArrayResource(os.toByteArray())));
+ return ServerResponse.status(HttpStatus.OK)
+ .contentType(MediaType.IMAGE_JPEG)
+ .body(BodyInserters.fromResource(new ByteArrayResource(os.toByteArray())));
}
}
diff --git a/pig-gateway/src/main/resources/application.yml b/pig-gateway/src/main/resources/application.yml
index 4e9e8bdf6376fd4b8c9db00432e7a0719c8193ca..c694dc1bafdd2e6a4833e8d69ca7f55b3cdc6583 100755
--- a/pig-gateway/src/main/resources/application.yml
+++ b/pig-gateway/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-register/pom.xml b/pig-register/pom.xml
index d5309be05a79bdcb18d4d4dbe23150b2e4a4b813..afed927c162b977a31a88fd4c28504ad58503361 100755
--- a/pig-register/pom.xml
+++ b/pig-register/pom.xml
@@ -18,7 +18,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-register
@@ -94,6 +94,7 @@
**/*.woff
**/*.woff2
**/*.ttf
+ **/*.eot
@@ -103,6 +104,7 @@
**/*.woff
**/*.woff2
**/*.ttf
+ **/*.eot
diff --git a/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java b/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java
index 74397f974d5be3a44af256a2338071ad528f76b5..42abdf46c422ead88a1bccb292a883c72e60fd5b 100755
--- a/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java
@@ -43,7 +43,7 @@ public class PigNacosApplication {
*/
private static boolean initEnv() {
System.setProperty(ConfigConstants.STANDALONE_MODE, "true");
- System.setProperty(ConfigConstants.AUTH_ENABLED, "false");
+ System.setProperty(ConfigConstants.AUTH_ENABLED, "true");
System.setProperty(ConfigConstants.LOG_BASEDIR, "logs");
System.setProperty(ConfigConstants.LOG_ENABLED, "false");
return true;
diff --git a/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java b/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java
index 7a3ec617d640bcfedaec633ab16088c31cbe6f65..b5dbe6e89392b96595f9f5045dc04619a77c0102 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java
@@ -16,6 +16,7 @@
package com.alibaba.nacos.config;
+import com.alibaba.nacos.console.filter.XssFilter;
import com.alibaba.nacos.core.code.ControllerMethodsCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
@@ -39,7 +40,7 @@ import java.time.ZoneId;
*/
@Component
@EnableScheduling
-@PropertySource("/application.properties")
+@PropertySource("/application.yml")
public class ConsoleConfig {
@Autowired
@@ -64,11 +65,17 @@ public class ConsoleConfig {
config.addAllowedHeader("*");
config.setMaxAge(18000L);
config.addAllowedMethod("*");
+ config.addAllowedOriginPattern("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
+ @Bean
+ public XssFilter xssFilter() {
+ return new XssFilter();
+ }
+
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(ZoneId.systemDefault().toString());
diff --git a/pig-register/src/main/java/com/alibaba/nacos/config/server/service/HistoryService.java b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/HistoryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..72a05665d637ec4664b03d736cc545f622b5eaa2
--- /dev/null
+++ b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/HistoryService.java
@@ -0,0 +1,88 @@
+package com.alibaba.nacos.config.server.service;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.nacos.common.utils.Pair;
+import com.alibaba.nacos.config.server.model.ConfigHistoryInfo;
+import com.alibaba.nacos.config.server.model.ConfigInfoWrapper;
+import com.alibaba.nacos.config.server.model.Page;
+import com.alibaba.nacos.config.server.service.repository.ConfigInfoPersistService;
+import com.alibaba.nacos.config.server.service.repository.HistoryConfigInfoPersistService;
+import com.alibaba.nacos.plugin.auth.exception.AccessException;
+import com.alibaba.nacos.plugin.encryption.handler.EncryptionHandler;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author aeizzz
+ */
+@Service
+public class HistoryService {
+
+ private final HistoryConfigInfoPersistService historyConfigInfoPersistService;
+
+ private final ConfigInfoPersistService configInfoPersistService;
+
+ public HistoryService(HistoryConfigInfoPersistService historyConfigInfoPersistService,
+ ConfigInfoPersistService configInfoPersistService) {
+ this.historyConfigInfoPersistService = historyConfigInfoPersistService;
+ this.configInfoPersistService = configInfoPersistService;
+ }
+
+ public Page listConfigHistory(String dataId, String group, String namespaceId, Integer pageNo,
+ Integer pageSize) {
+ return this.historyConfigInfoPersistService.findConfigHistory(dataId, group, namespaceId, pageNo, pageSize);
+ }
+
+ public ConfigHistoryInfo getConfigHistoryInfo(String dataId, String group, String namespaceId, Long nid)
+ throws AccessException {
+ ConfigHistoryInfo configHistoryInfo = this.historyConfigInfoPersistService.detailConfigHistory(nid);
+ if (Objects.isNull(configHistoryInfo)) {
+ return null;
+ }
+ else {
+ this.checkHistoryInfoPermission(configHistoryInfo, dataId, group, namespaceId);
+ String encryptedDataKey = configHistoryInfo.getEncryptedDataKey();
+ Pair pair = EncryptionHandler.decryptHandler(dataId, encryptedDataKey,
+ configHistoryInfo.getContent());
+ configHistoryInfo.setContent((String) pair.getSecond());
+ return configHistoryInfo;
+ }
+ }
+
+ public ConfigHistoryInfo getPreviousConfigHistoryInfo(String dataId, String group, String namespaceId, Long id)
+ throws AccessException {
+ ConfigHistoryInfo configHistoryInfo = this.historyConfigInfoPersistService.detailPreviousConfigHistory(id);
+ if (Objects.isNull(configHistoryInfo)) {
+ return null;
+ }
+ else {
+ this.checkHistoryInfoPermission(configHistoryInfo, dataId, group, namespaceId);
+ return configHistoryInfo;
+ }
+ }
+
+ public List getConfigListByNamespace(String namespaceId) {
+ return this.configInfoPersistService.queryConfigInfoByNamespace(namespaceId);
+ }
+
+ /**
+ * 覆盖原有的校验方式,oracle 数据库没有空 字符串 只有 null
+ * @param configHistoryInfo
+ * @param dataId
+ * @param group
+ * @param namespaceId
+ * @throws AccessException
+ */
+ private void checkHistoryInfoPermission(ConfigHistoryInfo configHistoryInfo, String dataId, String group,
+ String namespaceId) throws AccessException {
+ if (!Objects.equals(configHistoryInfo.getDataId(), dataId)
+ || !Objects.equals(configHistoryInfo.getGroup(), group)
+ || (!StrUtil.isEmpty(configHistoryInfo.getTenant())
+ && !Objects.equals(configHistoryInfo.getTenant(), namespaceId))) {
+ throw new AccessException("Please check dataId, group or namespaceId.");
+ }
+ }
+
+}
diff --git a/pig-register/src/main/java/com/alibaba/nacos/config/server/service/package-info.java b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3c747a1d663086d25cde4b3cf7852a8b82368ff
--- /dev/null
+++ b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * 处理再oracle数据库下空置的判断
+ */
+package com.alibaba.nacos.config.server.service;
diff --git a/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java b/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java
index 6799a0bcecdc180013047e8e552040e999bb125d..2b088165de0b78d4e1bc027a9d7a572b2358e21d 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java
@@ -77,7 +77,7 @@ public class HealthController {
if (!isConfigReadiness && !isNamingReadiness) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
- .body("Config and Naming are not in readiness");
+ .body("Config and Naming are not in readiness");
}
if (!isConfigReadiness) {
diff --git a/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java b/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java
index 9dd2b2f4a629c587065d73bf84baa3b6ef24b4af..8b0d6fbdfb4d043f08f807d24b872a3605445399 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java
@@ -57,7 +57,7 @@ public class ConsoleExceptionHandler {
LOGGER.error("CONSOLE {}", uri, e);
if (uri.contains(Commons.NACOS_SERVER_VERSION_V2)) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
- .body(RestResultUtils.failed(ExceptionUtil.getAllExceptionMsg(e)));
+ .body(RestResultUtils.failed(ExceptionUtil.getAllExceptionMsg(e)));
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ExceptionUtil.getAllExceptionMsg(e));
}
diff --git a/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java b/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java
index c73e8f8e0a09b51f52e0c1299d24cf0d6865aba7..c704dd0f1a236eb3210185f45dd3c2f122ed3460 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java
@@ -59,7 +59,7 @@ public class NacosApiExceptionHandler {
public ResponseEntity> handleNacosApiException(NacosApiException e) {
LOGGER.error("got exception. {} {}", e.getErrAbstract(), e.getErrMsg());
return ResponseEntity.status(e.getErrCode())
- .body(new Result<>(e.getDetailErrCode(), e.getErrAbstract(), e.getErrMsg()));
+ .body(new Result<>(e.getDetailErrCode(), e.getErrAbstract(), e.getErrMsg()));
}
@ExceptionHandler(NacosException.class)
diff --git a/pig-register/src/main/resources/application.yml b/pig-register/src/main/resources/application.yml
index 60681dab9e5b6017ad2218b2f663071b3c21b8d2..140e99fc32b0d1e0a920228067e40d6aff4a0478 100755
--- a/pig-register/src/main/resources/application.yml
+++ b/pig-register/src/main/resources/application.yml
@@ -2,24 +2,29 @@ server:
port: 8848 #如何修改 pig-register 启动端口 >: https://t.cn/A6XGvTdb
tomcat:
basedir: logs
+ error:
+ include-message: always
db:
num: 1
user: ${MYSQL_USER:root}
- password: ${MYSQL_PWD:root}
+ password: ${MYSQL_PWD:Zhangzhengxu123.}
url:
0: jdbc:mysql://${MYSQL_HOST:pig-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pig_config}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
-
+ pool.config.connectionTimeout: 30000
nacos:
core:
auth:
+ server:
+ identity:
+ key: serverIdentity
+ value: security
plugin.nacos.token.secret.key: SecretKey012345678901234567890123456789012345678901234567890123456789
- enabled: false
system.type: nacos
security:
ignore:
- urls: /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
+ urls: /actuator/**,/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
spring:
datasource:
diff --git a/pig-upms/pig-upms-api/pom.xml b/pig-upms/pig-upms-api/pom.xml
index 03c66e106ded4f295e16a1854dc0a86d6bb88054..9fae9627625b510331d6b003aafce1a2a81244d3 100755
--- a/pig-upms/pig-upms-api/pom.xml
+++ b/pig-upms/pig-upms-api/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-upms
- 3.6.4
+ 3.6.7
pig-upms-api
@@ -43,8 +43,8 @@
- org.springframework.cloud
- spring-cloud-openfeign-core
+ com.pig4cloud
+ pig-common-feign
true
diff --git a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
index 3dfc3f084a87acd1cade03a430478bba1a69956b..0af6d9ba570747f38c7facd78e992b90e97b6193 100755
--- a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
+++ b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
@@ -46,7 +46,6 @@ public interface RemoteUserService {
/**
* 通过手机号码查询用户、角色信息
* @param phone 手机号码
- * @param from 调用标志
* @return R
*/
@GetMapping(value = "/app/info/{phone}", headers = SecurityConstants.HEADER_FROM_IN)
@@ -55,7 +54,6 @@ public interface RemoteUserService {
/**
* 根据部门id,查询对应的用户 id 集合
* @param deptIds 部门id 集合
- * @param from 调用标志
* @return 用户 id 集合
*/
@GetMapping(value = "/user/ids", headers = SecurityConstants.HEADER_FROM_IN)
diff --git a/pig-upms/pig-upms-biz/pom.xml b/pig-upms/pig-upms-biz/pom.xml
index a3652ff2be98ce35a484cb7b9b39d82b199f0cf9..ce53f69edaf8e92951710d056265b40eb67b50fd 100644
--- a/pig-upms/pig-upms-biz/pom.xml
+++ b/pig-upms/pig-upms-biz/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-upms
- 3.6.4
+ 3.6.7
pig-upms-biz
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DeptController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
similarity index 94%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DeptController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
index 23bd6dca5a088a4722614f2ab9547e09f660a0b8..c0e4a2bd2922da58db9aaf47137b3bfb1c146344 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DeptController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
@@ -45,7 +45,7 @@ import java.util.List;
@RequestMapping("/dept")
@Tag(name = "部门管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class DeptController {
+public class SysDeptController {
private final SysDeptService sysDeptService;
@@ -115,13 +115,13 @@ public class DeptController {
/**
* 根据部门名查询部门信息
- * @param deptname 部门名
- * @return
+ * @param deptName 部门名
+ * @return SysDept
*/
- @GetMapping("/details/{deptname}")
- public R user(@PathVariable String deptname) {
+ @GetMapping("/details/{deptName}")
+ public R user(@PathVariable String deptName) {
SysDept condition = new SysDept();
- condition.setName(deptname);
+ condition.setName(deptName);
return R.ok(sysDeptService.getOne(new QueryWrapper<>(condition)));
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DictController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
similarity index 93%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DictController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
index 3c3623542621eed6929f82f3aa3470717dc4fc3c..3817925ab8a6b6d1648ecdb8043a4b150d07a53e 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DictController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
@@ -52,7 +52,7 @@ import java.util.List;
@RequestMapping("/dict")
@Tag(name = "字典管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class DictController {
+public class SysDictController {
private final SysDictItemService sysDictItemService;
@@ -75,19 +75,24 @@ public class DictController {
*/
@GetMapping("/page")
public R> getDictPage(Page page, SysDict sysDict) {
- return R.ok(sysDictService.page(page, Wrappers.lambdaQuery()
- .like(StrUtil.isNotBlank(sysDict.getDictKey()), SysDict::getDictKey, sysDict.getDictKey())));
+ return R.ok(sysDictService.page(page,
+ Wrappers.lambdaQuery()
+ .like(StrUtil.isNotBlank(sysDict.getDictKey()), SysDict::getDictKey, sysDict.getDictKey())
+ .orderByDesc(SysDict::getUpdateTime)));
}
/**
* 通过字典类型查找字典
- * @param type 类型
+ * @param key 类型
* @return 同类型字典
*/
@GetMapping("/key/{key}")
@Cacheable(value = CacheConstants.DICT_DETAILS, key = "#key")
public R> getDictByKey(@PathVariable String key) {
- return R.ok(sysDictItemService.list(Wrappers.query().lambda().eq(SysDictItem::getDictKey, key)));
+ return R.ok(sysDictItemService.list(Wrappers.query()
+ .lambda()
+ .eq(SysDictItem::getDictKey, key)
+ .orderByAsc(SysDictItem::getSortOrder)));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/FileController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
similarity index 97%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/FileController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
index 96154d68d8c0bb9219f596df63f30a72aa2858ea..59ed986841849ad29d1a2871e2c114e397fd0cab 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/FileController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
@@ -51,7 +51,7 @@ import javax.servlet.http.HttpServletResponse;
@RequestMapping("/sys-file")
@Tag(name = "文件管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class FileController {
+public class SysFileController {
private final SysFileService sysFileService;
@@ -65,7 +65,7 @@ public class FileController {
@GetMapping("/page")
public R> getSysFilePage(Page page, SysFile sysFile) {
return R.ok(sysFileService.page(page, Wrappers.lambdaQuery()
- .like(StrUtil.isNotBlank(sysFile.getFileName()), SysFile::getFileName, sysFile.getFileName())));
+ .like(StrUtil.isNotBlank(sysFile.getFileName()), SysFile::getFileName, sysFile.getFileName())));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/LogController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
similarity index 98%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/LogController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
index ff8c7f25f78c49df342295a3489271234e98ed9d..f33d031dc39cb5f9471c021014d1dda54debc5b4 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/LogController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
@@ -46,7 +46,7 @@ import java.util.List;
@RequestMapping("/log")
@Tag(name = "日志管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class LogController {
+public class SysLogController {
private final SysLogService sysLogService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/MenuController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
similarity index 92%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/MenuController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
index 31d7c96815d98a137cbfc68e0a90c1584bb13b4e..6b9e057e2ff4f01fb7a5e5182bf3bbecdfabb2f9 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/MenuController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
@@ -44,7 +44,7 @@ import java.util.stream.Collectors;
@RequestMapping("/menu")
@Tag(name = "菜单管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class MenuController {
+public class SysMenuController {
private final SysMenuService sysMenuService;
@@ -56,8 +56,11 @@ public class MenuController {
@GetMapping
public R>> getUserMenu(Long parentId) {
// 获取符合条件的菜单
- Set menuSet = SecurityUtils.getRoles().stream().map(sysMenuService::findMenuByRoleId)
- .flatMap(Collection::stream).collect(Collectors.toSet());
+ Set menuSet = SecurityUtils.getRoles()
+ .stream()
+ .map(sysMenuService::findMenuByRoleId)
+ .flatMap(Collection::stream)
+ .collect(Collectors.toSet());
return R.ok(sysMenuService.filterMenu(menuSet, parentId));
}
@@ -79,8 +82,8 @@ public class MenuController {
*/
@GetMapping("/tree/{roleId}")
public R> getRoleTree(@PathVariable Long roleId) {
- return R.ok(
- sysMenuService.findMenuByRoleId(roleId).stream().map(SysMenu::getMenuId).collect(Collectors.toList()));
+ return R
+ .ok(sysMenuService.findMenuByRoleId(roleId).stream().map(SysMenu::getMenuId).collect(Collectors.toList()));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/OauthClientDetailsController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysOauthClientDetailsController.java
similarity index 96%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/OauthClientDetailsController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysOauthClientDetailsController.java
index e21bfc6e47e077ace60c1f84ff39ecc68c675ad5..d01aad333afa331e772d02b507adf7137ffbf7ed 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/OauthClientDetailsController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysOauthClientDetailsController.java
@@ -47,7 +47,7 @@ import java.util.List;
@RequestMapping("/client")
@Tag(name = "客户端管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class OauthClientDetailsController {
+public class SysOauthClientDetailsController {
private final SysOauthClientDetailsService sysOauthClientDetailsService;
@@ -59,7 +59,7 @@ public class OauthClientDetailsController {
@GetMapping("/{clientId}")
public R> getByClientId(@PathVariable String clientId) {
return R.ok(sysOauthClientDetailsService
- .list(Wrappers.lambdaQuery().eq(SysOauthClientDetails::getClientId, clientId)));
+ .list(Wrappers.lambdaQuery().eq(SysOauthClientDetails::getClientId, clientId)));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PostController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
similarity index 99%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PostController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
index e2ed6c0ee6bb5f4d55d87bda3f56d6b55fe8ebd4..b8bffb48d492861a31b9a5599fad7f57b6c90db0 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PostController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
@@ -46,7 +46,7 @@ import java.util.List;
@RequestMapping("/post")
@Tag(name = "岗位管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class PostController {
+public class SysPostController {
private final SysPostService sysPostService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PublicParamController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
similarity index 93%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PublicParamController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
index b9e23f77f19078e36c1c5b354a590425fed4d15f..b397571816ccf43f012cddb261406579409493ca 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PublicParamController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
@@ -44,7 +44,7 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/param")
@Tag(name = "公共参数配置")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class PublicParamController {
+public class SysPublicParamController {
private final SysPublicParamService sysPublicParamService;
@@ -71,10 +71,10 @@ public class PublicParamController {
public R getSysPublicParamPage(Page page, SysPublicParam sysPublicParam) {
return R.ok(sysPublicParamService.page(page,
Wrappers.lambdaQuery()
- .like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
- sysPublicParam.getPublicName())
- .like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
- sysPublicParam.getPublicKey())));
+ .like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
+ sysPublicParam.getPublicName())
+ .like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
+ sysPublicParam.getPublicKey())));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RegisterController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
similarity index 97%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RegisterController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
index a5a0ab4920aaf8fbfdf0a2f3bb89e44c89b87d1a..8ee36fec990e86e5d04c3c29d9d8b9bcc8d62b55 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RegisterController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/register")
@RequiredArgsConstructor
@ConditionalOnProperty(name = "register.user", matchIfMissing = true)
-public class RegisterController {
+public class SysRegisterController {
private final SysUserService userService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RoleController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
similarity index 99%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RoleController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
index 570ac8c61a90a2f4b713fa163a5d750148384900..fc657136f7b7dce1fa2c82fe93c2857e8595147e 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RoleController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
@@ -48,7 +48,7 @@ import java.util.List;
@RequestMapping("/role")
@Tag(name = "角色管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class RoleController {
+public class SysRoleController {
private final SysRoleService sysRoleService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/UserController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
similarity index 98%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/UserController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
index ec4be7a18178ca233356d1af8a7dbb45f66a942c..ae65ff8f86c9c2f9f891fcfa6c3ee7782c4a3d7b 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/UserController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
@@ -58,7 +58,7 @@ import java.util.Set;
@RequestMapping("/user")
@Tag(name = "用户管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class UserController {
+public class SysUserController {
private final SysUserService userService;
@@ -122,8 +122,8 @@ public class UserController {
* @return
*/
@Inner(false)
- @GetMapping("/check/exsit")
- public R isExsit(UserDTO userDTO) {
+ @GetMapping("/check/exist")
+ public R isExist(UserDTO userDTO) {
List sysUserList = userService.list(new QueryWrapper<>(userDTO));
if (CollUtil.isNotEmpty(sysUserList)) {
return R.ok(Boolean.TRUE, MsgUtils.getMessage(ErrorCodes.SYS_USER_EXISTING));
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java
index 01e81a90d1020e1e3ba08106bc8fd11618cfb6db..a68246b54a40a2b498c47a753bbb555e9dabca32 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java
@@ -76,8 +76,8 @@ public class AppServiceImpl implements AppService {
String code = RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE));
log.info("手机号生成验证码成功:{},{}", sms.getPhone(), code);
- redisTemplate.opsForValue().set(CacheConstants.DEFAULT_CODE_KEY + sms.getPhone(), code,
- SecurityConstants.CODE_TIME, TimeUnit.SECONDS);
+ redisTemplate.opsForValue()
+ .set(CacheConstants.DEFAULT_CODE_KEY + sms.getPhone(), code, SecurityConstants.CODE_TIME, TimeUnit.SECONDS);
// 调用短信通道发送
this.smsClient.sendCode(code, sms.getPhone());
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java
index f777a5858175c2394d02aa8fb52627c70add684d..3f077e3db7e27dcc7faf97ae5dcf7a8fa128d267 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java
@@ -55,10 +55,12 @@ public class SysDeptRelationServiceImpl extends ServiceImpl relationList = sysDeptRelationMapper.selectList(
Wrappers.query().lambda().eq(SysDeptRelation::getDescendant, sysDept.getParentId()))
- .stream().map(relation -> {
- relation.setDescendant(sysDept.getDeptId());
- return relation;
- }).collect(Collectors.toList());
+ .stream()
+ .map(relation -> {
+ relation.setDescendant(sysDept.getDeptId());
+ return relation;
+ })
+ .collect(Collectors.toList());
if (CollUtil.isNotEmpty(relationList)) {
this.saveBatch(relationList);
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
index 029b3e81fadc8f012579bdb54e67bf6bd08c3170..ade640ef2be79bfd765f5669b6c19bb7d0c5cdf8 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
@@ -29,7 +29,6 @@ import com.pig4cloud.pig.admin.service.SysDeptRelationService;
import com.pig4cloud.pig.admin.service.SysDeptService;
import com.pig4cloud.pig.common.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -58,10 +57,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveDept(SysDept dept) {
- SysDept sysDept = new SysDept();
- BeanUtils.copyProperties(dept, sysDept);
- this.save(sysDept);
- sysDeptRelationService.saveDeptRelation(sysDept);
+ this.save(dept);
+ sysDeptRelationService.saveDeptRelation(dept);
return Boolean.TRUE;
}
@@ -75,8 +72,10 @@ public class SysDeptServiceImpl extends ServiceImpl impl
public Boolean removeDeptById(Long id) {
// 级联删除部门
List idList = sysDeptRelationService
- .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, id)).stream()
- .map(SysDeptRelation::getDescendant).collect(Collectors.toList());
+ .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, id))
+ .stream()
+ .map(SysDeptRelation::getDescendant)
+ .collect(Collectors.toList());
if (CollUtil.isNotEmpty(idList)) {
this.removeByIds(idList);
@@ -108,7 +107,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl
@Override
public List listChildDeptId(Long deptId) {
List deptRelations = sysDeptRelationService.list(Wrappers.lambdaQuery()
- .eq(SysDeptRelation::getAncestor, deptId).ne(SysDeptRelation::getDescendant, deptId));
+ .eq(SysDeptRelation::getAncestor, deptId)
+ .ne(SysDeptRelation::getDescendant, deptId));
if (CollUtil.isNotEmpty(deptRelations)) {
return deptRelations.stream().map(SysDeptRelation::getDescendant).collect(Collectors.toList());
}
@@ -132,8 +132,10 @@ public class SysDeptServiceImpl extends ServiceImpl impl
public List> listCurrentUserDeptTrees() {
Long deptId = SecurityUtils.getUser().getDeptId();
List descendantIdList = sysDeptRelationService
- .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, deptId)).stream()
- .map(SysDeptRelation::getDescendant).collect(Collectors.toList());
+ .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, deptId))
+ .stream()
+ .map(SysDeptRelation::getDescendant)
+ .collect(Collectors.toList());
List deptList = baseMapper.selectBatchIds(descendantIdList);
Optional dept = deptList.stream().filter(item -> item.getDeptId().intValue() == deptId).findFirst();
@@ -147,19 +149,22 @@ public class SysDeptServiceImpl extends ServiceImpl impl
* @return
*/
private List> getDeptTree(List depts, Long parentId) {
- List> collect = depts.stream().filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
- .sorted(Comparator.comparingInt(SysDept::getSortOrder)).map(dept -> {
- TreeNode treeNode = new TreeNode();
- treeNode.setId(dept.getDeptId());
- treeNode.setParentId(dept.getParentId());
- treeNode.setName(dept.getName());
- treeNode.setWeight(dept.getSortOrder());
- // 扩展属性
- Map extra = new HashMap<>(4);
- extra.put("createTime", dept.getCreateTime());
- treeNode.setExtra(extra);
- return treeNode;
- }).collect(Collectors.toList());
+ List> collect = depts.stream()
+ .filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
+ .sorted(Comparator.comparingInt(SysDept::getSortOrder))
+ .map(dept -> {
+ TreeNode treeNode = new TreeNode();
+ treeNode.setId(dept.getDeptId());
+ treeNode.setParentId(dept.getParentId());
+ treeNode.setName(dept.getName());
+ treeNode.setWeight(dept.getSortOrder());
+ // 扩展属性
+ Map extra = new HashMap<>(2);
+ extra.put("createTime", dept.getCreateTime());
+ treeNode.setExtra(extra);
+ return treeNode;
+ })
+ .collect(Collectors.toList());
return TreeUtil.build(collect, parentId);
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictItemServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictItemServiceImpl.java
index 65c729f22eaf55946fc27aa5f61ebff390ce9716..b43e6dc66129326115d2cc04c138e4bb5d098cbd 100755
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictItemServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictItemServiceImpl.java
@@ -65,7 +65,7 @@ public class SysDictItemServiceImpl extends ServiceImpl impl
* @return
*/
@Override
- @CacheEvict(value = CacheConstants.DICT_DETAILS, key = "#dict.type")
+ @CacheEvict(value = CacheConstants.DICT_DETAILS, key = "#dict.dictKey")
public void updateDict(SysDict dict) {
SysDict sysDict = this.getById(dict.getId());
// 系统内置
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
index a88639f792494c2d755d7553e8a8657d2150c6bb..eb04d3f62f1b1a3372337a53825ef4f743bd0b7b 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
@@ -63,12 +63,12 @@ public class SysLogServiceImpl extends ServiceImpl impleme
*/
private LambdaQueryWrapper buildQueryWrapper(SysLogDTO sysLog) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery()
- .eq(StrUtil.isNotBlank(sysLog.getType()), SysLog::getType, sysLog.getType())
- .like(StrUtil.isNotBlank(sysLog.getRemoteAddr()), SysLog::getRemoteAddr, sysLog.getRemoteAddr());
+ .eq(StrUtil.isNotBlank(sysLog.getType()), SysLog::getType, sysLog.getType())
+ .like(StrUtil.isNotBlank(sysLog.getRemoteAddr()), SysLog::getRemoteAddr, sysLog.getRemoteAddr());
if (ArrayUtil.isNotEmpty(sysLog.getCreateTime())) {
- wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTime()[0]).le(SysLog::getCreateTime,
- sysLog.getCreateTime()[1]);
+ wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTime()[0])
+ .le(SysLog::getCreateTime, sysLog.getCreateTime()[1]);
}
return wrapper;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
index 3eff49c585f828932bf64211d14ea60612182dd5..22663d06aa1e555b8144c9054e6b0970d425c65a 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
@@ -103,8 +103,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl
public List> treeMenu(boolean lazy, Long parentId) {
if (!lazy) {
List> collect = baseMapper
- .selectList(Wrappers.lambdaQuery().orderByAsc(SysMenu::getSortOrder)).stream()
- .map(getNodeFunction()).collect(Collectors.toList());
+ .selectList(Wrappers.lambdaQuery().orderByAsc(SysMenu::getSortOrder))
+ .stream()
+ .map(getNodeFunction())
+ .collect(Collectors.toList());
return TreeUtil.build(collect, CommonConstants.MENU_TREE_ROOT_ID);
}
@@ -112,9 +114,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl
Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
List> collect = baseMapper
- .selectList(Wrappers.lambdaQuery().eq(SysMenu::getParentId, parent)
- .orderByAsc(SysMenu::getSortOrder))
- .stream().map(getNodeFunction()).collect(Collectors.toList());
+ .selectList(
+ Wrappers.lambdaQuery().eq(SysMenu::getParentId, parent).orderByAsc(SysMenu::getSortOrder))
+ .stream()
+ .map(getNodeFunction())
+ .collect(Collectors.toList());
return TreeUtil.build(collect, parent);
}
@@ -128,8 +132,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl
@Override
public List> filterMenu(Set all, Long parentId) {
List> collect = all.stream()
- .filter(menu -> MenuTypeEnum.LEFT_MENU.getType().equals(menu.getType()))
- .filter(menu -> StrUtil.isNotBlank(menu.getPath())).map(getNodeFunction()).collect(Collectors.toList());
+ .filter(menu -> MenuTypeEnum.LEFT_MENU.getType().equals(menu.getType()))
+ .filter(menu -> StrUtil.isNotBlank(menu.getPath()))
+ .map(getNodeFunction())
+ .collect(Collectors.toList());
Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
return TreeUtil.build(collect, parent);
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
index b2231106e898779f7b1c3f0b386b48f605097510..925996a2e5cc6a9bf61cc60785c1e0e7ecbe5b6f 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
@@ -63,8 +63,9 @@ public class SysPostServiceImpl extends ServiceImpl impl
for (PostExcelVO excel : excelVOList) {
Set errorMsg = new HashSet<>();
// 检验岗位名称或者岗位编码是否存在
- boolean existPost = postList.stream().anyMatch(post -> excel.getPostName().equals(post.getPostName())
- || excel.getPostCode().equals(post.getPostCode()));
+ boolean existPost = postList.stream()
+ .anyMatch(post -> excel.getPostName().equals(post.getPostName())
+ || excel.getPostCode().equals(post.getPostCode()));
if (existPost) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_NAMEORCODE_EXISTING, excel.getPostName(),
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
index 7f9a373667584e5c03a0b7af49fc7af4eba6cef4..677065fd54b4070e690fb09fb929bdd90330a697 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
@@ -47,7 +47,7 @@ public class SysPublicParamServiceImpl extends ServiceImpllambdaQuery().eq(SysPublicParam::getPublicKey, publicKey));
+ .selectOne(Wrappers.lambdaQuery().eq(SysPublicParam::getPublicKey, publicKey));
if (sysPublicParam != null) {
return sysPublicParam.getPublicValue();
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
index 3d6c9f6f2a9839bfca6a8762e608f14754ce8a57..3af802c0ae490c86a9725c453bfb77a1a7ff445b 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
@@ -87,8 +87,9 @@ public class SysRoleServiceImpl extends ServiceImpl impl
for (RoleExcelVO excel : excelVOList) {
Set errorMsg = new HashSet<>();
// 检验角色名称或者角色编码是否存在
- boolean existRole = roleList.stream().anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
- || excel.getRoleCode().equals(sysRole.getRoleCode()));
+ boolean existRole = roleList.stream()
+ .anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
+ || excel.getRoleCode().equals(sysRole.getRoleCode()));
if (existRole) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(),
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
index b2b40166c7d483b0fc637066151bee8e294146c8..136739bddf7f0001d2aa33af63f21ae77e3b523e 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
@@ -130,9 +130,13 @@ public class SysUserServiceImpl extends ServiceImpl impl
List postList = sysPostMapper.listPostsByUserId(sysUser.getUserId());
userInfo.setPostList(postList);
// 设置权限列表(menu.permission)
- Set permissions = roleIds.stream().map(sysMenuService::findMenuByRoleId).flatMap(Collection::stream)
- .filter(m -> MenuTypeEnum.BUTTON.getType().equals(m.getType())).map(SysMenu::getPermission)
- .filter(StrUtil::isNotBlank).collect(Collectors.toSet());
+ Set permissions = roleIds.stream()
+ .map(sysMenuService::findMenuByRoleId)
+ .flatMap(Collection::stream)
+ .filter(m -> MenuTypeEnum.BUTTON.getType().equals(m.getType()))
+ .map(SysMenu::getPermission)
+ .filter(StrUtil::isNotBlank)
+ .collect(Collectors.toSet());
userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class));
return userInfo;
@@ -213,7 +217,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
this.updateById(sysUser);
sysUserRoleMapper
- .delete(Wrappers.update().lambda().eq(SysUserRole::getUserId, userDto.getUserId()));
+ .delete(Wrappers.update().lambda().eq(SysUserRole::getUserId, userDto.getUserId()));
userDto.getRole().forEach(roleId -> {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(sysUser.getUserId());
@@ -260,11 +264,15 @@ public class SysUserServiceImpl extends ServiceImpl impl
List userExcelVOList = voList.stream().map(userVO -> {
UserExcelVO excelVO = new UserExcelVO();
BeanUtils.copyProperties(userVO, excelVO);
- String roleNameList = userVO.getRoleList().stream().map(SysRole::getRoleName)
- .collect(Collectors.joining(StrUtil.COMMA));
+ String roleNameList = userVO.getRoleList()
+ .stream()
+ .map(SysRole::getRoleName)
+ .collect(Collectors.joining(StrUtil.COMMA));
excelVO.setRoleNameList(roleNameList);
- String postNameList = userVO.getPostList().stream().map(SysPost::getPostName)
- .collect(Collectors.joining(StrUtil.COMMA));
+ String postNameList = userVO.getPostList()
+ .stream()
+ .map(SysPost::getPostName)
+ .collect(Collectors.joining(StrUtil.COMMA));
excelVO.setPostNameList(postNameList);
return excelVO;
}).collect(Collectors.toList());
@@ -292,16 +300,17 @@ public class SysUserServiceImpl extends ServiceImpl impl
for (UserExcelVO excel : excelVOList) {
Set errorMsg = new HashSet<>();
// 校验用户名是否存在
- boolean exsitUserName = userList.stream()
- .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
+ boolean existUserName = userList.stream()
+ .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
- if (exsitUserName) {
+ if (existUserName) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
}
// 判断输入的部门名称列表是否合法
Optional deptOptional = deptList.stream()
- .filter(dept -> excel.getDeptName().equals(dept.getName())).findFirst();
+ .filter(dept -> excel.getDeptName().equals(dept.getName()))
+ .findFirst();
if (!deptOptional.isPresent()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName()));
}
@@ -309,8 +318,8 @@ public class SysUserServiceImpl extends ServiceImpl impl
// 判断输入的角色名称列表是否合法
List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
List roleCollList = roleList.stream()
- .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
- .collect(Collectors.toList());
+ .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
+ .collect(Collectors.toList());
if (roleCollList.size() != roleNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
@@ -319,8 +328,8 @@ public class SysUserServiceImpl extends ServiceImpl impl
// 判断输入的岗位名称列表是否合法
List postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA);
List postCollList = postList.stream()
- .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
- .collect(Collectors.toList());
+ .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
+ .collect(Collectors.toList());
if (postCollList.size() != postNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList()));
@@ -393,7 +402,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
// 默认角色
SysRole sysRole = sysRoleMapper
- .selectOne(Wrappers.lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
+ .selectOne(Wrappers.lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
if (sysRole == null) {
return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_PARAM_CONFIG_ERROR, "USER_DEFAULT_ROLE"));
diff --git a/pig-upms/pig-upms-biz/src/main/resources/application.yml b/pig-upms/pig-upms-biz/src/main/resources/application.yml
index 7528a4fa80fba135b7cd75a8ba3e966f1d83d09c..d3da88fc3a92307ec651d760574839fb2aecfdad 100644
--- a/pig-upms/pig-upms-biz/src/main/resources/application.yml
+++ b/pig-upms/pig-upms-biz/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-upms/pom.xml b/pig-upms/pom.xml
index a5994580b570bb1bf709237068120017e9c2d207..629b8138d0854a8f71d05fe009900ebcc2da8b35 100755
--- a/pig-upms/pom.xml
+++ b/pig-upms/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-upms
diff --git a/pig-visual/pig-codegen/pom.xml b/pig-visual/pig-codegen/pom.xml
index d5cadd48517d5efd637a6671357cba5657611d5f..6c5ebb1ec36cb33d4b06fb8af36da59d6c792ff9 100755
--- a/pig-visual/pig-codegen/pom.xml
+++ b/pig-visual/pig-codegen/pom.xml
@@ -22,7 +22,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-codegen
diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
index 7f3d5d2ebb9cd644f7fd9bd5d76cc43b7922a3ad..8dc7da320ea6994f80fe9392336900406b755ee8 100755
--- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
+++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
@@ -82,7 +82,7 @@ public class GenDatasourceConfServiceImpl extends ServiceImpllambdaQuery().eq(GenFormConf::getTableName, tableName)
- .orderByDesc(GenFormConf::getCreateTime), false);
+ GenFormConf form = getOne(Wrappers.lambdaQuery()
+ .eq(GenFormConf::getTableName, tableName)
+ .orderByDesc(GenFormConf::getCreateTime), false);
if (form != null) {
return form.getFormInfo();
diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
index 94b901bf9e72eb0032ba13c58d7d6bc5ae1bc676..9d65392a97f2c22fd5ab5258fbc1a9ba9654a2a2 100755
--- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
+++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
@@ -77,7 +77,8 @@ public class GeneratorServiceImpl implements GeneratorService {
public Map previewCode(GenConfig genConfig) {
// 根据tableName 查询最新的表单配置
List formConfList = genFormConfMapper.selectList(Wrappers.lambdaQuery()
- .eq(GenFormConf::getTableName, genConfig.getTableName()).orderByDesc(GenFormConf::getCreateTime));
+ .eq(GenFormConf::getTableName, genConfig.getTableName())
+ .orderByDesc(GenFormConf::getCreateTime));
String tableNames = genConfig.getTableName();
String dsName = genConfig.getDsName();
@@ -111,7 +112,8 @@ public class GeneratorServiceImpl implements GeneratorService {
public byte[] generatorCode(GenConfig genConfig) {
// 根据tableName 查询最新的表单配置
List formConfList = genFormConfMapper.selectList(Wrappers.lambdaQuery()
- .eq(GenFormConf::getTableName, genConfig.getTableName()).orderByDesc(GenFormConf::getCreateTime));
+ .eq(GenFormConf::getTableName, genConfig.getTableName())
+ .orderByDesc(GenFormConf::getCreateTime));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
index de5a7ffd285215991e18bc97c39ed703b6b59933..3de92f7c14a942f2b495632db46780abfb617299 100644
--- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
+++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
@@ -36,8 +36,11 @@ public enum StyleTypeEnum {
private String description;
public static String getDecs(String style) {
- return Arrays.stream(StyleTypeEnum.values()).filter(styleTypeEnum -> styleTypeEnum.getStyle().equals(style))
- .findFirst().orElse(ELEMENT).getDescription();
+ return Arrays.stream(StyleTypeEnum.values())
+ .filter(styleTypeEnum -> styleTypeEnum.getStyle().equals(style))
+ .findFirst()
+ .orElse(ELEMENT)
+ .getDescription();
}
}
diff --git a/pig-visual/pig-codegen/src/main/resources/application.yml b/pig-visual/pig-codegen/src/main/resources/application.yml
index 3a87b84885733cb1e37dc5c94db769a8e2cff6de..a21122e311ac9c2fbefa2bc2ad48136e5e35b812 100644
--- a/pig-visual/pig-codegen/src/main/resources/application.yml
+++ b/pig-visual/pig-codegen/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-visual/pig-monitor/pom.xml b/pig-visual/pig-monitor/pom.xml
index e643f3cf14f99ecd755f2538b1ed49c234d0ecb4..1be8a1170cbf3be7d1ef5fc9b4f86ad9ff5a74b6 100755
--- a/pig-visual/pig-monitor/pom.xml
+++ b/pig-visual/pig-monitor/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-monitor
diff --git a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java
index 316f9a781784d0292938c531250bef93994ffd96..1498b0d831efcddf6d1e46016870778dd2f93f4b 100755
--- a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java
+++ b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java
@@ -49,12 +49,28 @@ public class WebSecurityConfigurer {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
- http.headers().frameOptions().disable().and().authorizeRequests()
- .antMatchers(adminContextPath + "/assets/**", adminContextPath + "/login",
- adminContextPath + "/instances/**", adminContextPath + "/actuator/**")
- .permitAll().anyRequest().authenticated().and().formLogin().loginPage(adminContextPath + "/login")
- .successHandler(successHandler).and().logout().logoutUrl(adminContextPath + "/logout").and().httpBasic()
- .and().csrf().disable();
+ http.headers()
+ .frameOptions()
+ .disable()
+ .and()
+ .authorizeRequests()
+ .antMatchers(adminContextPath + "/assets/**", adminContextPath + "/login",
+ adminContextPath + "/instances/**", adminContextPath + "/actuator/**")
+ .permitAll()
+ .anyRequest()
+ .authenticated()
+ .and()
+ .formLogin()
+ .loginPage(adminContextPath + "/login")
+ .successHandler(successHandler)
+ .and()
+ .logout()
+ .logoutUrl(adminContextPath + "/logout")
+ .and()
+ .httpBasic()
+ .and()
+ .csrf()
+ .disable();
return http.build();
}
diff --git a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
index 6298de211e5e73d0f798070de9af34b59059e02e..d5a87bc1f6fe0789a5e7985a056d6983adf8a59c 100644
--- a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
+++ b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
@@ -20,10 +20,11 @@ public class NacosServiceInstanceConverter extends DefaultServiceInstanceConvert
@Override
protected Map getMetadata(ServiceInstance instance) {
- return (instance.getMetadata() != null)
- ? instance.getMetadata().entrySet().stream().filter((e) -> e.getKey() != null && e.getValue() != null)
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))
- : emptyMap();
+ return (instance.getMetadata() != null) ? instance.getMetadata()
+ .entrySet()
+ .stream()
+ .filter((e) -> e.getKey() != null && e.getValue() != null)
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) : emptyMap();
}
}
diff --git a/pig-visual/pig-monitor/src/main/resources/application.yml b/pig-visual/pig-monitor/src/main/resources/application.yml
index 2ce78424eb85462b1544fb092ff1798f72b62ccb..928dcb819db6292ae90e6245d8034f59cfd8466f 100755
--- a/pig-visual/pig-monitor/src/main/resources/application.yml
+++ b/pig-visual/pig-monitor/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-visual/pig-sentinel-dashboard/pom.xml b/pig-visual/pig-sentinel-dashboard/pom.xml
index 86f4321d097e7009abe519cfa41bca44c444ccba..9a3fb87eafb8d98a67ca5a357cdc5e45b5bea0aa 100755
--- a/pig-visual/pig-sentinel-dashboard/pom.xml
+++ b/pig-visual/pig-sentinel-dashboard/pom.xml
@@ -6,7 +6,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-sentinel-dashboard
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
index b8a864deb36d2590743b142570b7d15a80a34cf9..af8c6a3d462063e4098db413a2c33177c602d1e7 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
@@ -88,7 +88,7 @@ public class DefaultLoginAuthenticationFilter implements LoginAuthenticationFilt
// Exclude the urls which needn't auth
boolean authFilterExcludeMatch = authFilterExcludeUrls.stream()
- .anyMatch(authFilterExcludeUrl -> PATH_MATCHER.match(authFilterExcludeUrl, servletPath));
+ .anyMatch(authFilterExcludeUrl -> PATH_MATCHER.match(authFilterExcludeUrl, servletPath));
if (authFilterExcludeMatch) {
chain.doFilter(request, response);
return;
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
index afeb58bb46c3b461fa31db10466471dfb3faf2b2..821727f54c7d6011fb5dae351a517826621ffa13 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
@@ -87,7 +87,7 @@ public class SentinelApiClient {
private static final String HTTP_HEADER_CONTENT_TYPE = "Content-Type";
private static final String HTTP_HEADER_CONTENT_TYPE_URLENCODED = ContentType.create(URLEncodedUtils.CONTENT_TYPE)
- .toString();
+ .toString();
private static final String RESOURCE_URL_PATH = "jsonTree";
@@ -143,8 +143,11 @@ public class SentinelApiClient {
private AppManagement appManagement;
public SentinelApiClient() {
- IOReactorConfig ioConfig = IOReactorConfig.custom().setConnectTimeout(3000).setSoTimeout(10000)
- .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2).build();
+ IOReactorConfig ioConfig = IOReactorConfig.custom()
+ .setConnectTimeout(3000)
+ .setSoTimeout(10000)
+ .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2)
+ .build();
httpClient = HttpAsyncClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
protected boolean isRedirectable(final String method) {
@@ -164,10 +167,10 @@ public class SentinelApiClient {
}
protected boolean isSupportPost(String app, String ip, int port) {
- return StringUtil.isNotEmpty(app)
- && Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version160)))
- .orElse(false);
+ return StringUtil.isNotEmpty(app) && Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version160)))
+ .orElse(false);
}
/**
@@ -178,10 +181,10 @@ public class SentinelApiClient {
* @param port target node's port
*/
protected boolean isSupportEnhancedContentType(String app, String ip, int port) {
- return StringUtil.isNotEmpty(app)
- && Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version171)))
- .orElse(false);
+ return StringUtil.isNotEmpty(app) && Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version171)))
+ .orElse(false);
}
private StringBuilder queryString(Map params) {
@@ -368,7 +371,7 @@ public class SentinelApiClient {
AssertUtil.isTrue(port > 0, "Bad machine port");
Map params = null;
if (StringUtil.isNotEmpty(type)) {
- params = new HashMap<>(1);
+ params = new HashMap<>(2);
params.put("type", type);
}
return executeCommand(ip, port, api, params, false).thenApply(json -> JSON.parseArray(json, ruleType));
@@ -379,11 +382,6 @@ public class SentinelApiClient {
try {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
- Map params = null;
- if (StringUtil.isNotEmpty(type)) {
- params = new HashMap<>(1);
- params.put("type", type);
- }
return fetchItemsAsync(ip, port, api, type, ruleType).get();
}
catch (InterruptedException | ExecutionException e) {
@@ -409,7 +407,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
String data = JSON.toJSONString(entities.stream().map(r -> r.toRule()).collect(Collectors.toList()));
- Map params = new HashMap<>(2);
+ Map params = new HashMap<>(4);
params.put("type", type);
params.put("data", data);
String result = executeCommand(app, ip, port, SET_RULES_PATH, params, true).get();
@@ -438,7 +436,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
String data = JSON.toJSONString(entities.stream().map(r -> r.toRule()).collect(Collectors.toList()));
- Map params = new HashMap<>(2);
+ Map params = new HashMap<>(4);
params.put("type", type);
params.put("data", data);
return executeCommand(app, ip, port, SET_RULES_PATH, params, true).thenCompose(r -> {
@@ -476,8 +474,9 @@ public class SentinelApiClient {
public List fetchFlowRuleOfMachine(String app, String ip, int port) {
List rules = fetchRules(ip, port, FLOW_RULE_TYPE, FlowRule.class);
if (rules != null) {
- return rules.stream().map(rule -> FlowRuleEntity.fromFlowRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ return rules.stream()
+ .map(rule -> FlowRuleEntity.fromFlowRule(app, ip, port, rule))
+ .collect(Collectors.toList());
}
else {
return null;
@@ -487,8 +486,9 @@ public class SentinelApiClient {
public List fetchDegradeRuleOfMachine(String app, String ip, int port) {
List rules = fetchRules(ip, port, DEGRADE_RULE_TYPE, DegradeRule.class);
if (rules != null) {
- return rules.stream().map(rule -> DegradeRuleEntity.fromDegradeRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ return rules.stream()
+ .map(rule -> DegradeRuleEntity.fromDegradeRule(app, ip, port, rule))
+ .collect(Collectors.toList());
}
else {
return null;
@@ -498,8 +498,9 @@ public class SentinelApiClient {
public List fetchSystemRuleOfMachine(String app, String ip, int port) {
List rules = fetchRules(ip, port, SYSTEM_RULE_TYPE, SystemRule.class);
if (rules != null) {
- return rules.stream().map(rule -> SystemRuleEntity.fromSystemRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ return rules.stream()
+ .map(rule -> SystemRuleEntity.fromSystemRule(app, ip, port, rule))
+ .collect(Collectors.toList());
}
else {
return null;
@@ -520,8 +521,9 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
return fetchItemsAsync(ip, port, GET_PARAM_RULE_PATH, null, ParamFlowRule.class)
- .thenApply(rules -> rules.stream().map(e -> ParamFlowRuleEntity.fromParamFlowRule(app, ip, port, e))
- .collect(Collectors.toList()));
+ .thenApply(rules -> rules.stream()
+ .map(e -> ParamFlowRuleEntity.fromParamFlowRule(app, ip, port, e))
+ .collect(Collectors.toList()));
}
catch (Exception e) {
logger.error("Error when fetching parameter flow rules", e);
@@ -541,12 +543,14 @@ public class SentinelApiClient {
AssertUtil.notEmpty(app, "Bad app name");
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("type", AUTHORITY_TYPE);
List rules = fetchRules(ip, port, AUTHORITY_TYPE, AuthorityRule.class);
- return Optional.ofNullable(rules).map(r -> r.stream()
- .map(e -> AuthorityRuleEntity.fromAuthorityRule(app, ip, port, e)).collect(Collectors.toList()))
- .orElse(null);
+ return Optional.ofNullable(rules)
+ .map(r -> r.stream()
+ .map(e -> AuthorityRuleEntity.fromAuthorityRule(app, ip, port, e))
+ .collect(Collectors.toList()))
+ .orElse(null);
}
/**
@@ -607,8 +611,8 @@ public class SentinelApiClient {
}
try {
String data = JSON
- .toJSONString(rules.stream().map(ParamFlowRuleEntity::getRule).collect(Collectors.toList()));
- Map params = new HashMap<>(1);
+ .toJSONString(rules.stream().map(ParamFlowRuleEntity::getRule).collect(Collectors.toList()));
+ Map params = new HashMap<>(2);
params.put("data", data);
return executeCommand(app, ip, port, SET_PARAM_RULE_PATH, params, true).thenCompose(e -> {
if (CommandConstants.MSG_SUCCESS.equals(e)) {
@@ -634,7 +638,7 @@ public class SentinelApiClient {
}
try {
return executeCommand(ip, port, FETCH_CLUSTER_MODE_PATH, false)
- .thenApply(r -> JSON.parseObject(r, ClusterStateSimpleEntity.class));
+ .thenApply(r -> JSON.parseObject(r, ClusterStateSimpleEntity.class));
}
catch (Exception ex) {
logger.warn("Error when fetching cluster mode", ex);
@@ -647,7 +651,7 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("mode", String.valueOf(mode));
return executeCommand(ip, port, MODIFY_CLUSTER_MODE_PATH, params, false).thenCompose(e -> {
if (CommandConstants.MSG_SUCCESS.equals(e)) {
@@ -671,7 +675,7 @@ public class SentinelApiClient {
}
try {
return executeCommand(ip, port, FETCH_CLUSTER_CLIENT_CONFIG_PATH, false)
- .thenApply(r -> JSON.parseObject(r, ClusterClientInfoVO.class));
+ .thenApply(r -> JSON.parseObject(r, ClusterClientInfoVO.class));
}
catch (Exception ex) {
logger.warn("Error when fetching cluster client config", ex);
@@ -685,7 +689,7 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("data", JSON.toJSONString(config));
return executeCommand(app, ip, port, MODIFY_CLUSTER_CLIENT_CONFIG_PATH, params, true).thenCompose(e -> {
if (CommandConstants.MSG_SUCCESS.equals(e)) {
@@ -709,18 +713,18 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("data", JSON.toJSONString(config));
return executeCommand(app, ip, port, MODIFY_CLUSTER_SERVER_FLOW_CONFIG_PATH, params, true)
- .thenCompose(e -> {
- if (CommandConstants.MSG_SUCCESS.equals(e)) {
- return CompletableFuture.completedFuture(null);
- }
- else {
- logger.warn("Error when modifying cluster server flow config: " + e);
- return AsyncUtils.newFailedFuture(new RuntimeException(e));
- }
- });
+ .thenCompose(e -> {
+ if (CommandConstants.MSG_SUCCESS.equals(e)) {
+ return CompletableFuture.completedFuture(null);
+ }
+ else {
+ logger.warn("Error when modifying cluster server flow config: " + e);
+ return AsyncUtils.newFailedFuture(new RuntimeException(e));
+ }
+ });
}
catch (Exception ex) {
logger.warn("Error when modifying cluster server flow config", ex);
@@ -734,19 +738,19 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(2);
+ Map params = new HashMap<>(4);
params.put("port", config.getPort().toString());
params.put("idleSeconds", config.getIdleSeconds().toString());
return executeCommand(app, ip, port, MODIFY_CLUSTER_SERVER_TRANSPORT_CONFIG_PATH, params, false)
- .thenCompose(e -> {
- if (CommandConstants.MSG_SUCCESS.equals(e)) {
- return CompletableFuture.completedFuture(null);
- }
- else {
- logger.warn("Error when modifying cluster server transport config: " + e);
- return AsyncUtils.newFailedFuture(new RuntimeException(e));
- }
- });
+ .thenCompose(e -> {
+ if (CommandConstants.MSG_SUCCESS.equals(e)) {
+ return CompletableFuture.completedFuture(null);
+ }
+ else {
+ logger.warn("Error when modifying cluster server transport config: " + e);
+ return AsyncUtils.newFailedFuture(new RuntimeException(e));
+ }
+ });
}
catch (Exception ex) {
logger.warn("Error when modifying cluster server transport config", ex);
@@ -759,18 +763,18 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("data", JSON.toJSONString(set));
return executeCommand(app, ip, port, MODIFY_CLUSTER_SERVER_NAMESPACE_SET_PATH, params, true)
- .thenCompose(e -> {
- if (CommandConstants.MSG_SUCCESS.equals(e)) {
- return CompletableFuture.completedFuture(null);
- }
- else {
- logger.warn("Error when modifying cluster server NamespaceSet", e);
- return AsyncUtils.newFailedFuture(new RuntimeException(e));
- }
- });
+ .thenCompose(e -> {
+ if (CommandConstants.MSG_SUCCESS.equals(e)) {
+ return CompletableFuture.completedFuture(null);
+ }
+ else {
+ logger.warn("Error when modifying cluster server NamespaceSet", e);
+ return AsyncUtils.newFailedFuture(new RuntimeException(e));
+ }
+ });
}
catch (Exception ex) {
logger.warn("Error when modifying cluster server NamespaceSet", ex);
@@ -784,7 +788,7 @@ public class SentinelApiClient {
}
try {
return executeCommand(ip, port, FETCH_CLUSTER_SERVER_BASIC_INFO_PATH, false)
- .thenApply(r -> JSON.parseObject(r, ClusterServerStateVO.class));
+ .thenApply(r -> JSON.parseObject(r, ClusterServerStateVO.class));
}
catch (Exception ex) {
logger.warn("Error when fetching cluster sever all config and basic info", ex);
@@ -847,8 +851,8 @@ public class SentinelApiClient {
return executeCommand(ip, port, FETCH_GATEWAY_FLOW_RULE_PATH, false).thenApply(r -> {
List gatewayFlowRules = JSON.parseArray(r, GatewayFlowRule.class);
List entities = gatewayFlowRules.stream()
- .map(rule -> GatewayFlowRuleEntity.fromGatewayFlowRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ .map(rule -> GatewayFlowRuleEntity.fromGatewayFlowRule(app, ip, port, rule))
+ .collect(Collectors.toList());
return entities;
});
}
@@ -868,7 +872,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
String data = JSON
- .toJSONString(rules.stream().map(r -> r.toGatewayFlowRule()).collect(Collectors.toList()));
+ .toJSONString(rules.stream().map(r -> r.toGatewayFlowRule()).collect(Collectors.toList()));
Map params = new HashMap<>(2);
params.put("data", data);
String result = executeCommand(app, ip, port, MODIFY_GATEWAY_FLOW_RULE_PATH, params, true).get();
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
index b372453bb4a1e65cd44325690972cc6c53248db6..1efc019edf404c92c7ac76d25d4c12693bb53b86 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
@@ -58,8 +58,10 @@ public class AppController {
return Result.ofSuccess(null);
}
List list = new ArrayList<>(appInfo.getMachines());
- Collections.sort(list, Comparator.comparing(MachineInfo::getApp).thenComparing(MachineInfo::getIp)
- .thenComparingInt(MachineInfo::getPort));
+ Collections.sort(list,
+ Comparator.comparing(MachineInfo::getApp)
+ .thenComparing(MachineInfo::getIp)
+ .thenComparingInt(MachineInfo::getPort));
return Result.ofSuccess(MachineInfoVo.fromMachineInfoList(list));
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
index f81d64cd9099138153242416a42cc40860f6847e..72ddaf3b9043e19184f298b128e8e86591318395 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
@@ -60,9 +60,10 @@ public class ParamFlowRuleController {
private boolean checkIfSupported(String app, String ip, int port) {
try {
- return Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version020)))
- .orElse(true);
+ return Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version020)))
+ .orElse(true);
// If error occurred or cannot retrieve machine info, return true.
}
catch (Exception ex) {
@@ -87,8 +88,10 @@ public class ParamFlowRuleController {
return unsupportedVersion();
}
try {
- return sentinelApiClient.fetchParamFlowRulesOfMachine(app, ip, port).thenApply(repository::saveAll)
- .thenApply(Result::ofSuccess).get();
+ return sentinelApiClient.fetchParamFlowRulesOfMachine(app, ip, port)
+ .thenApply(repository::saveAll)
+ .thenApply(Result::ofSuccess)
+ .get();
}
catch (ExecutionException ex) {
logger.error("Error when querying parameter flow rules", ex.getCause());
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
index ad9148c603648351c5bb8e1ba8beb502a0828c02..c342d5460688e57025ff06fdd743578f8c17ae3a 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
@@ -81,8 +81,8 @@ public class ResourceController {
}
if (StringUtil.isNotEmpty(searchKey)) {
nodeVos = nodeVos.stream()
- .filter(node -> node.getResource().toLowerCase().contains(searchKey.toLowerCase()))
- .collect(Collectors.toList());
+ .filter(node -> node.getResource().toLowerCase().contains(searchKey.toLowerCase()))
+ .collect(Collectors.toList());
}
return Result.ofSuccess(ResourceVo.fromNodeVoList(nodeVos));
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java
index e967900b8c559ffd6b4f40186a7513e805508fdc..d15dee282e7c5d20bcbf358ae45489a37ad0d268 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java
@@ -147,7 +147,9 @@ public class ClusterConfigController {
}
try {
return clusterConfigService.getClusterUniversalState(app)
- .thenApply(ClusterEntityUtils::wrapToAppClusterServerState).thenApply(Result::ofSuccess).get();
+ .thenApply(ClusterEntityUtils::wrapToAppClusterServerState)
+ .thenApply(Result::ofSuccess)
+ .get();
}
catch (ExecutionException ex) {
logger.error("Error when fetching cluster server state of app: " + app, ex.getCause());
@@ -166,7 +168,9 @@ public class ClusterConfigController {
}
try {
return clusterConfigService.getClusterUniversalState(app)
- .thenApply(ClusterEntityUtils::wrapToAppClusterClientState).thenApply(Result::ofSuccess).get();
+ .thenApply(ClusterEntityUtils::wrapToAppClusterClientState)
+ .thenApply(Result::ofSuccess)
+ .get();
}
catch (ExecutionException ex) {
logger.error("Error when fetching cluster token client state of app: " + app, ex.getCause());
@@ -202,9 +206,10 @@ public class ClusterConfigController {
private boolean checkIfSupported(String app, String ip, int port) {
try {
- return Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version140)))
- .orElse(true);
+ return Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version140)))
+ .orElse(true);
// If error occurred or cannot retrieve machine info, return true.
}
catch (Exception ex) {
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
index 32e1888271bb7bd696c9d7b9c58b41e71c084ef4..9415b577e964bc9c6ec35dd190d631a181073b5e 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
@@ -125,7 +125,7 @@ public class GatewayApiController {
// 匹配模式
Integer matchStrategy = predicateItem.getMatchStrategy();
if (!Arrays.asList(URL_MATCH_STRATEGY_EXACT, URL_MATCH_STRATEGY_PREFIX, URL_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "invalid matchStrategy: " + matchStrategy);
}
predicateItemEntity.setMatchStrategy(matchStrategy);
@@ -197,7 +197,7 @@ public class GatewayApiController {
// 匹配模式
int matchStrategy = predicateItem.getMatchStrategy();
if (!Arrays.asList(URL_MATCH_STRATEGY_EXACT, URL_MATCH_STRATEGY_PREFIX, URL_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "Invalid matchStrategy: " + matchStrategy);
}
predicateItemEntity.setMatchStrategy(matchStrategy);
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
index 016d4f3960150065dcceb122103d067ca673f32e..5a9907c40220b4c443dc0e52da9ccd713d0a7937 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
@@ -132,15 +132,17 @@ public class GatewayFlowRuleController {
// 参数属性 0-ClientIP 1-Remote Host 2-Header 3-URL参数 4-Cookie
Integer parseStrategy = paramItem.getParseStrategy();
- if (!Arrays.asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
- PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE).contains(parseStrategy)) {
+ if (!Arrays
+ .asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
+ PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
+ .contains(parseStrategy)) {
return Result.ofFail(-1, "invalid parseStrategy: " + parseStrategy);
}
itemEntity.setParseStrategy(paramItem.getParseStrategy());
// 当参数属性为2-Header 3-URL参数 4-Cookie时,参数名称必填
if (Arrays.asList(PARAM_PARSE_STRATEGY_HEADER, PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
- .contains(parseStrategy)) {
+ .contains(parseStrategy)) {
// 参数名称
String fieldName = paramItem.getFieldName();
if (StringUtil.isBlank(fieldName)) {
@@ -155,8 +157,8 @@ public class GatewayFlowRuleController {
itemEntity.setPattern(pattern);
Integer matchStrategy = paramItem.getMatchStrategy();
if (!Arrays
- .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "invalid matchStrategy: " + matchStrategy);
}
itemEntity.setMatchStrategy(matchStrategy);
@@ -199,7 +201,7 @@ public class GatewayFlowRuleController {
return Result.ofFail(-1, "intervalUnit can't be null");
}
if (!Arrays.asList(INTERVAL_UNIT_SECOND, INTERVAL_UNIT_MINUTE, INTERVAL_UNIT_HOUR, INTERVAL_UNIT_DAY)
- .contains(intervalUnit)) {
+ .contains(intervalUnit)) {
return Result.ofFail(-1, "Invalid intervalUnit: " + intervalUnit);
}
entity.setIntervalUnit(intervalUnit);
@@ -283,15 +285,17 @@ public class GatewayFlowRuleController {
// 参数属性 0-ClientIP 1-Remote Host 2-Header 3-URL参数 4-Cookie
Integer parseStrategy = paramItem.getParseStrategy();
- if (!Arrays.asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
- PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE).contains(parseStrategy)) {
+ if (!Arrays
+ .asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
+ PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
+ .contains(parseStrategy)) {
return Result.ofFail(-1, "invalid parseStrategy: " + parseStrategy);
}
itemEntity.setParseStrategy(paramItem.getParseStrategy());
// 当参数属性为2-Header 3-URL参数 4-Cookie时,参数名称必填
if (Arrays.asList(PARAM_PARSE_STRATEGY_HEADER, PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
- .contains(parseStrategy)) {
+ .contains(parseStrategy)) {
// 参数名称
String fieldName = paramItem.getFieldName();
if (StringUtil.isBlank(fieldName)) {
@@ -306,8 +310,8 @@ public class GatewayFlowRuleController {
itemEntity.setPattern(pattern);
Integer matchStrategy = paramItem.getMatchStrategy();
if (!Arrays
- .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "invalid matchStrategy: " + matchStrategy);
}
itemEntity.setMatchStrategy(matchStrategy);
@@ -353,7 +357,7 @@ public class GatewayFlowRuleController {
return Result.ofFail(-1, "intervalUnit can't be null");
}
if (!Arrays.asList(INTERVAL_UNIT_SECOND, INTERVAL_UNIT_MINUTE, INTERVAL_UNIT_HOUR, INTERVAL_UNIT_DAY)
- .contains(intervalUnit)) {
+ .contains(intervalUnit)) {
return Result.ofFail(-1, "Invalid intervalUnit: " + intervalUnit);
}
entity.setIntervalUnit(intervalUnit);
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
index 463412c837c394459981928f72f9091c83152ccc..33bfc2bb763fd051b8a342286835e863a1a9c9fc 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
@@ -98,8 +98,10 @@ public class AppInfo {
long healthyCount = machines.stream().filter(MachineInfo::isHealthy).count();
if (healthyCount == 0) {
// No healthy machines.
- return machines.stream().max(Comparator.comparingLong(MachineInfo::getLastHeartbeat))
- .map(e -> System.currentTimeMillis() - e.getLastHeartbeat() < threshold).orElse(false);
+ return machines.stream()
+ .max(Comparator.comparingLong(MachineInfo::getLastHeartbeat))
+ .map(e -> System.currentTimeMillis() - e.getLastHeartbeat() < threshold)
+ .orElse(false);
}
}
return true;
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
index 2b4a080bc0cae2f25b53341e64c44bc2fd70a8fb..357ed599fb4d61b2ff4d4a9f9a977d8463b25b95 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
@@ -151,11 +151,31 @@ public class MachineInfo implements Comparable {
@Override
public String toString() {
- return new StringBuilder("MachineInfo {").append("app='").append(app).append('\'').append(",appType='")
- .append(appType).append('\'').append(", hostname='").append(hostname).append('\'').append(", ip='")
- .append(ip).append('\'').append(", port=").append(port).append(", heartbeatVersion=")
- .append(heartbeatVersion).append(", lastHeartbeat=").append(lastHeartbeat).append(", version='")
- .append(version).append('\'').append(", healthy=").append(isHealthy()).append('}').toString();
+ return new StringBuilder("MachineInfo {").append("app='")
+ .append(app)
+ .append('\'')
+ .append(",appType='")
+ .append(appType)
+ .append('\'')
+ .append(", hostname='")
+ .append(hostname)
+ .append('\'')
+ .append(", ip='")
+ .append(ip)
+ .append('\'')
+ .append(", port=")
+ .append(port)
+ .append(", heartbeatVersion=")
+ .append(heartbeatVersion)
+ .append(", lastHeartbeat=")
+ .append(lastHeartbeat)
+ .append(", version='")
+ .append(version)
+ .append('\'')
+ .append(", healthy=")
+ .append(isHealthy())
+ .append('}')
+ .toString();
}
@Override
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
index ec42af53b69b0ebe2492edfa233cb36e7b69b6a5..2b4cc7887cea6ad4b8ed84311fcfc332a45ee050 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
@@ -101,8 +101,11 @@ public class MetricFetcher {
fetchWorker = new ThreadPoolExecutor(cores, cores, keepAliveTime, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<>(queueSize),
new NamedThreadFactory("sentinel-dashboard-metrics-fetchWorker", true), handler);
- IOReactorConfig ioConfig = IOReactorConfig.custom().setConnectTimeout(3000).setSoTimeout(3000)
- .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2).build();
+ IOReactorConfig ioConfig = IOReactorConfig.custom()
+ .setConnectTimeout(3000)
+ .setSoTimeout(3000)
+ .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2)
+ .build();
httpclient = HttpAsyncClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java
index 684ffc2c05b25878604940af119b295a7a9baf85..7968851a8d375f9e2b82b01ae8f234a8096146cf 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java
@@ -52,14 +52,15 @@ public class InMemoryMetricsRepository implements MetricsRepository new HashMap<>(16))
- .computeIfAbsent(entity.getResource(), e -> new LinkedHashMap() {
- @Override
- protected boolean removeEldestEntry(Entry eldest) {
- // Metric older than {@link #MAX_METRIC_LIVE_TIME_MS} will be
- // removed.
- return eldest.getKey() < TimeUtil.currentTimeMillis() - MAX_METRIC_LIVE_TIME_MS;
- }
- }).put(entity.getTimestamp().getTime(), entity);
+ .computeIfAbsent(entity.getResource(), e -> new LinkedHashMap() {
+ @Override
+ protected boolean removeEldestEntry(Entry eldest) {
+ // Metric older than {@link #MAX_METRIC_LIVE_TIME_MS} will be
+ // removed.
+ return eldest.getKey() < TimeUtil.currentTimeMillis() - MAX_METRIC_LIVE_TIME_MS;
+ }
+ })
+ .put(entity.getTimestamp().getTime(), entity);
}
finally {
readWriteLock.writeLock().unlock();
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
index 2e6e15cf7c0656cec045594d6a3d8b6b4542616c..d3be5f88b7b920fcd347cf5dce3aa40af3bacc40 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
@@ -49,11 +49,12 @@ public abstract class InMemoryRuleRepositoryAdapter implem
if (processedEntity != null) {
allRules.put(processedEntity.getId(), processedEntity);
machineRules
- .computeIfAbsent(MachineInfo.of(processedEntity.getApp(), processedEntity.getIp(),
- processedEntity.getPort()), e -> new ConcurrentHashMap<>(32))
- .put(processedEntity.getId(), processedEntity);
+ .computeIfAbsent(
+ MachineInfo.of(processedEntity.getApp(), processedEntity.getIp(), processedEntity.getPort()),
+ e -> new ConcurrentHashMap<>(32))
+ .put(processedEntity.getId(), processedEntity);
appRules.computeIfAbsent(processedEntity.getApp(), v -> new ConcurrentHashMap<>(32))
- .put(processedEntity.getId(), processedEntity);
+ .put(processedEntity.getId(), processedEntity);
}
return processedEntity;
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java
index c5bf9fc8c8c59b5a40ebea9dfbefa5f170bf69de..eabafdd2bcdc5af805572baa2d7236987852e5b3 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java
@@ -44,10 +44,12 @@ public class FlowRuleApiProvider implements DynamicRuleProvider();
}
- List list = appManagement.getDetailApp(appName).getMachines().stream()
- .filter(MachineInfo::isHealthy)
- .sorted((e1, e2) -> Long.compare(e2.getLastHeartbeat(), e1.getLastHeartbeat()))
- .collect(Collectors.toList());
+ List list = appManagement.getDetailApp(appName)
+ .getMachines()
+ .stream()
+ .filter(MachineInfo::isHealthy)
+ .sorted((e1, e2) -> Long.compare(e2.getLastHeartbeat(), e1.getLastHeartbeat()))
+ .collect(Collectors.toList());
if (list.isEmpty()) {
return new ArrayList<>();
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java
index 1635e8d61f2cc197fbac20fa28eb98a9fa542e66..53a046af61d5519724309382e2334d265ab4952c 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java
@@ -60,13 +60,14 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
private ClusterAppAssignResultVO handleUnbindClusterServerNotInApp(String app, String machineId) {
Set failedSet = new HashSet<>();
try {
- List list = clusterConfigService.getClusterUniversalState(app).get(10,
- TimeUnit.SECONDS);
+ List list = clusterConfigService.getClusterUniversalState(app)
+ .get(10, TimeUnit.SECONDS);
Set toModifySet = list.stream()
- .filter(e -> e.getState().getStateInfo().getMode() == ClusterStateManager.CLUSTER_CLIENT)
- .filter(e -> machineId.equals(e.getState().getClient().getClientConfig().getServerHost() + ':'
- + e.getState().getClient().getClientConfig().getServerPort()))
- .map(e -> e.getIp() + '@' + e.getCommandPort()).collect(Collectors.toSet());
+ .filter(e -> e.getState().getStateInfo().getMode() == ClusterStateManager.CLUSTER_CLIENT)
+ .filter(e -> machineId.equals(e.getState().getClient().getClientConfig().getServerHost() + ':'
+ + e.getState().getClient().getClientConfig().getServerPort()))
+ .map(e -> e.getIp() + '@' + e.getCommandPort())
+ .collect(Collectors.toSet());
// Modify mode to NOT-STARTED for all associated token clients.
modifyToNonStarted(toModifySet, failedSet);
}
@@ -79,11 +80,15 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
}
private void modifyToNonStarted(Set toModifySet, Set failedSet) {
- toModifySet.parallelStream().map(MachineUtils::parseCommandIpAndPort).filter(Optional::isPresent)
- .map(Optional::get).map(e -> {
- CompletableFuture f = modifyMode(e.r1, e.r2, ClusterStateManager.CLUSTER_NOT_STARTED);
- return Tuple2.of(e.r1 + '@' + e.r2, f);
- }).forEach(f -> handleFutureSync(f, failedSet));
+ toModifySet.parallelStream()
+ .map(MachineUtils::parseCommandIpAndPort)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .map(e -> {
+ CompletableFuture f = modifyMode(e.r1, e.r2, ClusterStateManager.CLUSTER_NOT_STARTED);
+ return Tuple2.of(e.r1 + '@' + e.r2, f);
+ })
+ .forEach(f -> handleFutureSync(f, failedSet));
}
@Override
@@ -97,7 +102,7 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
Set failedSet = new HashSet<>();
try {
ClusterGroupEntity entity = clusterConfigService.getClusterUniversalStateForAppMachine(app, machineId)
- .get(10, TimeUnit.SECONDS);
+ .get(10, TimeUnit.SECONDS);
Set toModifySet = new HashSet<>();
toModifySet.add(machineId);
if (entity.getClientSet() != null) {
@@ -120,7 +125,7 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
AssertUtil.assertNotBlank(app, "app cannot be blank");
AssertUtil.isTrue(machineIdSet != null && !machineIdSet.isEmpty(), "machineIdSet cannot be empty");
ClusterAppAssignResultVO result = new ClusterAppAssignResultVO().setFailedClientSet(new HashSet<>())
- .setFailedServerSet(new HashSet<>());
+ .setFailedServerSet(new HashSet<>());
for (String machineId : machineIdSet) {
ClusterAppAssignResultVO resultVO = unbindClusterServer(app, machineId);
result.getFailedClientSet().addAll(resultVO.getFailedClientSet());
@@ -142,13 +147,14 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
String ip = e.getIp();
int commandPort = parsePort(e);
CompletableFuture f = modifyMode(ip, commandPort, ClusterStateManager.CLUSTER_SERVER)
- .thenCompose(v -> applyServerConfigChange(app, ip, commandPort, e));
+ .thenCompose(v -> applyServerConfigChange(app, ip, commandPort, e));
return Tuple2.of(e.getMachineId(), f);
}).forEach(t -> handleFutureSync(t, failedServerSet));
// Assign client of servers and apply config.
- clusterMap.parallelStream().filter(Objects::nonNull)
- .forEach(e -> applyAllClientConfigChange(app, e, failedClientSet));
+ clusterMap.parallelStream()
+ .filter(Objects::nonNull)
+ .forEach(e -> applyAllClientConfigChange(app, e, failedClientSet));
// Unbind remaining (unassigned) machines.
applyAllRemainingMachineSet(app, remainingSet, failedClientSet);
@@ -160,13 +166,18 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
if (remainingSet == null || remainingSet.isEmpty()) {
return;
}
- remainingSet.parallelStream().filter(Objects::nonNull).map(MachineUtils::parseCommandIpAndPort)
- .filter(Optional::isPresent).map(Optional::get).map(ipPort -> {
- String ip = ipPort.r1;
- int commandPort = ipPort.r2;
- CompletableFuture f = modifyMode(ip, commandPort, ClusterStateManager.CLUSTER_NOT_STARTED);
- return Tuple2.of(ip + '@' + commandPort, f);
- }).forEach(t -> handleFutureSync(t, failedSet));
+ remainingSet.parallelStream()
+ .filter(Objects::nonNull)
+ .map(MachineUtils::parseCommandIpAndPort)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .map(ipPort -> {
+ String ip = ipPort.r1;
+ int commandPort = ipPort.r2;
+ CompletableFuture f = modifyMode(ip, commandPort, ClusterStateManager.CLUSTER_NOT_STARTED);
+ return Tuple2.of(ip + '@' + commandPort, f);
+ })
+ .forEach(t -> handleFutureSync(t, failedSet));
}
private void applyAllClientConfigChange(String app, ClusterAppAssignMap assignMap, Set failedSet) {
@@ -176,15 +187,20 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
}
final String serverIp = assignMap.getIp();
final int serverPort = assignMap.getPort();
- clientSet.stream().map(MachineUtils::parseCommandIpAndPort).filter(Optional::isPresent).map(Optional::get)
- .map(ipPort -> {
- CompletableFuture f = sentinelApiClient
- .modifyClusterMode(ipPort.r1, ipPort.r2, ClusterStateManager.CLUSTER_CLIENT)
- .thenCompose(v -> sentinelApiClient.modifyClusterClientConfig(app, ipPort.r1, ipPort.r2,
- new ClusterClientConfig().setRequestTimeout(20).setServerHost(serverIp)
- .setServerPort(serverPort)));
- return Tuple2.of(ipPort.r1 + '@' + ipPort.r2, f);
- }).forEach(t -> handleFutureSync(t, failedSet));
+ clientSet.stream()
+ .map(MachineUtils::parseCommandIpAndPort)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .map(ipPort -> {
+ CompletableFuture f = sentinelApiClient
+ .modifyClusterMode(ipPort.r1, ipPort.r2, ClusterStateManager.CLUSTER_CLIENT)
+ .thenCompose(v -> sentinelApiClient.modifyClusterClientConfig(app, ipPort.r1, ipPort.r2,
+ new ClusterClientConfig().setRequestTimeout(20)
+ .setServerHost(serverIp)
+ .setServerPort(serverPort)));
+ return Tuple2.of(ipPort.r1 + '@' + ipPort.r2, f);
+ })
+ .forEach(t -> handleFutureSync(t, failedSet));
}
private void handleFutureSync(Tuple2> t, Set failedSet) {
@@ -205,10 +221,10 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
private CompletableFuture applyServerConfigChange(String app, String ip, int commandPort,
ClusterAppAssignMap assignMap) {
ServerTransportConfig transportConfig = new ServerTransportConfig().setPort(assignMap.getPort())
- .setIdleSeconds(600);
+ .setIdleSeconds(600);
return sentinelApiClient.modifyClusterServerTransportConfig(app, ip, commandPort, transportConfig)
- .thenCompose(v -> applyServerFlowConfigChange(app, ip, commandPort, assignMap))
- .thenCompose(v -> applyServerNamespaceSetConfig(app, ip, commandPort, assignMap));
+ .thenCompose(v -> applyServerFlowConfigChange(app, ip, commandPort, assignMap))
+ .thenCompose(v -> applyServerNamespaceSetConfig(app, ip, commandPort, assignMap));
}
private CompletableFuture applyServerFlowConfigChange(String app, String ip, int commandPort,
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java
index d1cf10ffd1251f8d43da4a41f2cb5a8a4830b0b2..d88506316359cf254a0d90c2d8d6fcb3be2b51a1 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java
@@ -61,7 +61,7 @@ public class ClusterConfigService {
String ip = request.getIp();
int port = request.getPort();
return sentinelApiClient.modifyClusterClientConfig(app, ip, port, request.getClientConfig())
- .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_CLIENT));
+ .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_CLIENT));
}
private boolean notClientRequestValid(/* @NonNull */ ClusterClientModifyRequest request) {
@@ -87,9 +87,9 @@ public class ClusterConfigService {
String ip = request.getIp();
int port = request.getPort();
return sentinelApiClient.modifyClusterServerNamespaceSet(app, ip, port, namespaceSet)
- .thenCompose(v -> sentinelApiClient.modifyClusterServerTransportConfig(app, ip, port, transportConfig))
- .thenCompose(v -> sentinelApiClient.modifyClusterServerFlowConfig(app, ip, port, flowConfig))
- .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_SERVER));
+ .thenCompose(v -> sentinelApiClient.modifyClusterServerTransportConfig(app, ip, port, transportConfig))
+ .thenCompose(v -> sentinelApiClient.modifyClusterServerFlowConfig(app, ip, port, flowConfig))
+ .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_SERVER));
}
/**
@@ -107,11 +107,12 @@ public class ClusterConfigService {
return CompletableFuture.completedFuture(new ArrayList<>());
}
- List> futures = appInfo.getMachines().stream()
- .filter(e -> e.isHealthy())
- .map(machine -> getClusterUniversalState(app, machine.getIp(), machine.getPort())
- .thenApply(e -> new ClusterUniversalStatePairVO(machine.getIp(), machine.getPort(), e)))
- .collect(Collectors.toList());
+ List> futures = appInfo.getMachines()
+ .stream()
+ .filter(e -> e.isHealthy())
+ .map(machine -> getClusterUniversalState(app, machine.getIp(), machine.getPort())
+ .thenApply(e -> new ClusterUniversalStatePairVO(machine.getIp(), machine.getPort(), e)))
+ .collect(Collectors.toList());
return AsyncUtils.sequenceSuccessFuture(futures);
}
@@ -125,36 +126,43 @@ public class ClusterConfigService {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("app does not have machines"));
}
- boolean machineOk = appInfo.getMachines().stream().filter(e -> e.isHealthy())
- .map(e -> e.getIp() + '@' + e.getPort()).anyMatch(e -> e.equals(machineId));
+ boolean machineOk = appInfo.getMachines()
+ .stream()
+ .filter(e -> e.isHealthy())
+ .map(e -> e.getIp() + '@' + e.getPort())
+ .anyMatch(e -> e.equals(machineId));
if (!machineOk) {
return AsyncUtils.newFailedFuture(new IllegalStateException("machine does not exist or disconnected"));
}
return getClusterUniversalState(app).thenApply(ClusterEntityUtils::wrapToClusterGroup)
- .thenCompose(e -> e.stream().filter(e1 -> e1.getMachineId().equals(machineId)).findAny()
- .map(CompletableFuture::completedFuture)
- .orElse(AsyncUtils.newFailedFuture(new IllegalStateException("not a server: " + machineId))));
+ .thenCompose(e -> e.stream()
+ .filter(e1 -> e1.getMachineId().equals(machineId))
+ .findAny()
+ .map(CompletableFuture::completedFuture)
+ .orElse(AsyncUtils.newFailedFuture(new IllegalStateException("not a server: " + machineId))));
}
public CompletableFuture getClusterUniversalState(String app, String ip, int port) {
return sentinelApiClient.fetchClusterMode(ip, port)
- .thenApply(e -> new ClusterUniversalStateVO().setStateInfo(e)).thenCompose(vo -> {
- if (vo.getStateInfo().getClientAvailable()) {
- return sentinelApiClient.fetchClusterClientInfoAndConfig(ip, port)
- .thenApply(cc -> vo.setClient(new ClusterClientStateVO().setClientConfig(cc)));
- }
- else {
- return CompletableFuture.completedFuture(vo);
- }
- }).thenCompose(vo -> {
- if (vo.getStateInfo().getServerAvailable()) {
- return sentinelApiClient.fetchClusterServerBasicInfo(ip, port).thenApply(vo::setServer);
- }
- else {
- return CompletableFuture.completedFuture(vo);
- }
- });
+ .thenApply(e -> new ClusterUniversalStateVO().setStateInfo(e))
+ .thenCompose(vo -> {
+ if (vo.getStateInfo().getClientAvailable()) {
+ return sentinelApiClient.fetchClusterClientInfoAndConfig(ip, port)
+ .thenApply(cc -> vo.setClient(new ClusterClientStateVO().setClientConfig(cc)));
+ }
+ else {
+ return CompletableFuture.completedFuture(vo);
+ }
+ })
+ .thenCompose(vo -> {
+ if (vo.getStateInfo().getServerAvailable()) {
+ return sentinelApiClient.fetchClusterServerBasicInfo(ip, port).thenApply(vo::setServer);
+ }
+ else {
+ return CompletableFuture.completedFuture(vo);
+ }
+ });
}
private boolean invalidTransportConfig(ServerTransportConfig transportConfig) {
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java
index b7372b273a26dad85d9c2227ec1c7a32c134f552..2cf15bbc95d55f9f926d31a002cc3fd9b3cc4219 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java
@@ -39,13 +39,18 @@ public final class AsyncUtils {
}
public static CompletableFuture> sequenceFuture(List> futures) {
- return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenApply(
- v -> futures.stream().map(AsyncUtils::getValue).filter(Objects::nonNull).collect(Collectors.toList()));
+ return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))
+ .thenApply(v -> futures.stream()
+ .map(AsyncUtils::getValue)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList()));
}
public static CompletableFuture> sequenceSuccessFuture(List> futures) {
- return CompletableFuture.supplyAsync(() -> futures.parallelStream().map(AsyncUtils::getValue)
- .filter(Objects::nonNull).collect(Collectors.toList()));
+ return CompletableFuture.supplyAsync(() -> futures.parallelStream()
+ .map(AsyncUtils::getValue)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList()));
}
public static T getValue(CompletableFuture future) {
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
index a4cb6de124758687c478966272ec4184acfd4fb5..de2ed0c5d17183a37c2c47321319f2ba388d6410 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
@@ -45,10 +45,15 @@ public final class ClusterEntityUtils {
String serverId = ip + '@' + stateVO.getCommandPort();
ClusterServerStateVO serverStateVO = stateVO.getState().getServer();
map.computeIfAbsent(serverId,
- v -> new AppClusterServerStateWrapVO().setId(serverId).setIp(ip)
- .setPort(serverStateVO.getPort()).setState(serverStateVO).setBelongToApp(true)
- .setConnectedCount(serverStateVO.getConnection().stream()
- .mapToInt(ConnectionGroupVO::getConnectedCount).sum()));
+ v -> new AppClusterServerStateWrapVO().setId(serverId)
+ .setIp(ip)
+ .setPort(serverStateVO.getPort())
+ .setState(serverStateVO)
+ .setBelongToApp(true)
+ .setConnectedCount(serverStateVO.getConnection()
+ .stream()
+ .mapToInt(ConnectionGroupVO::getConnectedCount)
+ .sum()));
tokenServerSet.add(ip + ":" + serverStateVO.getPort());
}
}
@@ -69,8 +74,11 @@ public final class ClusterEntityUtils {
// We are not able to get the commandPort of foreign token server
// directly.
String serverId = String.format("%s:%d", serverIp, serverPort);
- map.computeIfAbsent(serverId, v -> new AppClusterServerStateWrapVO().setId(serverId).setIp(serverIp)
- .setPort(serverPort).setBelongToApp(false));
+ map.computeIfAbsent(serverId,
+ v -> new AppClusterServerStateWrapVO().setId(serverId)
+ .setIp(serverIp)
+ .setPort(serverPort)
+ .setBelongToApp(false));
}
}
return new ArrayList<>(map.values());
@@ -89,8 +97,11 @@ public final class ClusterEntityUtils {
String ip = stateVO.getIp();
String clientId = ip + '@' + stateVO.getCommandPort();
ClusterClientStateVO clientStateVO = stateVO.getState().getClient();
- map.computeIfAbsent(clientId, v -> new AppClusterClientStateWrapVO().setId(clientId).setIp(ip)
- .setState(clientStateVO).setCommandPort(stateVO.getCommandPort()));
+ map.computeIfAbsent(clientId,
+ v -> new AppClusterClientStateWrapVO().setId(clientId)
+ .setIp(ip)
+ .setState(clientStateVO)
+ .setCommandPort(stateVO.getCommandPort()));
}
}
return new ArrayList<>(map.values());
@@ -108,8 +119,11 @@ public final class ClusterEntityUtils {
String serverAddress = getIp(ip);
int port = stateVO.getState().getServer().getPort();
String targetAddress = serverAddress + ":" + port;
- map.computeIfAbsent(targetAddress, v -> new ClusterGroupEntity().setBelongToApp(true)
- .setMachineId(ip + '@' + stateVO.getCommandPort()).setIp(ip).setPort(port));
+ map.computeIfAbsent(targetAddress,
+ v -> new ClusterGroupEntity().setBelongToApp(true)
+ .setMachineId(ip + '@' + stateVO.getCommandPort())
+ .setIp(ip)
+ .setPort(port));
}
}
for (ClusterUniversalStatePairVO stateVO : list) {
@@ -122,8 +136,11 @@ public final class ClusterEntityUtils {
continue;
}
String targetAddress = targetServer + ":" + targetPort;
- ClusterGroupEntity group = map.computeIfAbsent(targetAddress, v -> new ClusterGroupEntity()
- .setBelongToApp(true).setMachineId(targetServer).setIp(targetServer).setPort(targetPort));
+ ClusterGroupEntity group = map.computeIfAbsent(targetAddress,
+ v -> new ClusterGroupEntity().setBelongToApp(true)
+ .setMachineId(targetServer)
+ .setIp(targetServer)
+ .setPort(targetPort));
group.getClientSet().add(ip + '@' + stateVO.getCommandPort());
}
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml b/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml
index f70cb932358fae68bcbc36b2ab0946d5e8feffa5..d88c2d1be2f0430d144ea0f64c8497a828dbd9c3 100755
--- a/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml
+++ b/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml
@@ -9,6 +9,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
diff --git a/pig-visual/pig-xxl-job-admin/pom.xml b/pig-visual/pig-xxl-job-admin/pom.xml
index 098b2cdaa043ec2adff906a12e51cadd321678e6..1478ed7026f28fbb5717c7ce83c6cee8a0db5d51 100644
--- a/pig-visual/pig-xxl-job-admin/pom.xml
+++ b/pig-visual/pig-xxl-job-admin/pom.xml
@@ -4,7 +4,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-xxl-job-admin
@@ -95,9 +95,11 @@
src/main/resources
true
- sta**/*.woff
+ **/*.woff
**/*.woff2
+ **/*.otf
**/*.ttf
+ **/*.eot
@@ -107,6 +109,8 @@
**/*.woff
**/*.woff2
**/*.ttf
+ **/*.otf
+ **/*.eot
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
index 7c5be8e64a6891c33fd5d3956a34a368d0dac68f..4bea237be39f1de9a86b7d890d664531f8197709 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
@@ -49,8 +49,9 @@ public class JobApiController {
}
if (XxlJobAdminConfig.getAdminConfig().getAccessToken() != null
&& XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length() > 0
- && !XxlJobAdminConfig.getAdminConfig().getAccessToken()
- .equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
+ && !XxlJobAdminConfig.getAdminConfig()
+ .getAccessToken()
+ .equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
return new ReturnT(ReturnT.FAIL_CODE, "The access token is wrong.");
}
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
old mode 100755
new mode 100644
index f52e941bdfab932eb570d3533116840b735a7b77..87c5da426f324a7f2ee883e73f8e7149ecae0214
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
@@ -1,5 +1,6 @@
package com.xxl.job.admin.controller;
+import com.xxl.job.admin.controller.annotation.PermissionLimit;
import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobRegistry;
import com.xxl.job.admin.core.util.I18nUtil;
@@ -37,12 +38,14 @@ public class JobGroupController {
private XxlJobRegistryDao xxlJobRegistryDao;
@RequestMapping
+ @PermissionLimit(adminuser = true)
public String index(Model model) {
return "jobgroup/jobgroup.index";
}
@RequestMapping("/pageList")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public Map pageList(HttpServletRequest request,
@RequestParam(required = false, defaultValue = "0") int start,
@RequestParam(required = false, defaultValue = "10") int length, String appname, String title) {
@@ -61,6 +64,7 @@ public class JobGroupController {
@RequestMapping("/save")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT save(XxlJobGroup xxlJobGroup) {
// valid
@@ -107,6 +111,7 @@ public class JobGroupController {
@RequestMapping("/update")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT update(XxlJobGroup xxlJobGroup) {
// valid
if (xxlJobGroup.getAppname() == null || xxlJobGroup.getAppname().trim().length() == 0) {
@@ -177,6 +182,7 @@ public class JobGroupController {
@RequestMapping("/remove")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT remove(int id) {
// valid
@@ -196,6 +202,7 @@ public class JobGroupController {
@RequestMapping("/loadById")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT loadById(int id) {
XxlJobGroup jobGroup = xxlJobGroupDao.load(id);
return jobGroup != null ? new ReturnT(jobGroup)
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
old mode 100755
new mode 100644
index d7225dd124717fe8839c1f09d36db9172b6f2ea9..8aad8291d137983663e81da3226ec9edf272a294
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
@@ -138,23 +138,29 @@ public class JobLogController {
model.addAttribute("triggerCode", jobLog.getTriggerCode());
model.addAttribute("handleCode", jobLog.getHandleCode());
- model.addAttribute("executorAddress", jobLog.getExecutorAddress());
- model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
model.addAttribute("logId", jobLog.getId());
return "joblog/joblog.detail";
}
@RequestMapping("/logDetailCat")
@ResponseBody
- public ReturnT logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum) {
+ public ReturnT logDetailCat(long logId, int fromLineNum) {
try {
- ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress);
- ReturnT logResult = executorBiz.log(new LogParam(triggerTime, logId, fromLineNum));
+ // valid
+ XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve
+ // performance
+ if (jobLog == null) {
+ return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid"));
+ }
+
+ // log cat
+ ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress());
+ ReturnT logResult = executorBiz
+ .log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum));
// is end
if (logResult.getContent() != null
&& logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
- XxlJobLog jobLog = xxlJobLogDao.load(logId);
if (jobLog.getHandleCode() > 0) {
logResult.getContent().setEnd(true);
}
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
index 1b3fcf1eef522ca1511ba70859dc815b26cbc84a..e60ea1ccccffc8d7bb76e147cf31510cdfa9bca4 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
@@ -7,6 +7,7 @@ import java.lang.annotation.Target;
/**
* 权限限制
+ *
* @author xuxueli 2015-12-12 18:29:02
*/
@Target(ElementType.METHOD)
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
index 4c52796e66b97a8d2c7f8aa88213c43acaf27d01..869eb1d393cd916d2a754d316c9073a8cf205045 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
@@ -49,8 +49,9 @@ public class EmailJobAlarm implements JobAlarm {
}
// email info
- XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao()
- .load(Integer.valueOf(info.getJobGroup()));
+ XxlJobGroup group = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobGroupDao()
+ .load(Integer.valueOf(info.getJobGroup()));
String personal = I18nUtil.getString("admin_name_full");
String title = I18nUtil.getString("jobconf_monitor");
String content = MessageFormat.format(loadEmailJobAlarmTemplate(),
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
index 92e50d158ffc9ba5b1e1a38c264b158ce9787047..435ac1fe9dd7f17e719fbb4d84aae122c00c37af 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
@@ -47,8 +47,9 @@ public class XxlJobCompleter {
// 1、handle success, to trigger child job
String triggerChildMsg = null;
if (XxlJobContext.HANDLE_CODE_SUCCESS == xxlJobLog.getHandleCode()) {
- XxlJobInfo xxlJobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao()
- .loadById(xxlJobLog.getJobId());
+ XxlJobInfo xxlJobInfo = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobInfoDao()
+ .loadById(xxlJobLog.getJobId());
if (xxlJobInfo != null && xxlJobInfo.getChildJobId() != null
&& xxlJobInfo.getChildJobId().trim().length() > 0) {
triggerChildMsg = "
>>>>>>>>>>>"
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
index 530d6dbf8b3392b96f677d60d694a76e725efbcc..3a5dd759e41a31e6591450196b0747c0d2485ecc 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
@@ -30,9 +30,13 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
idleBeatResult = new ReturnT(ReturnT.FAIL_CODE, "" + e);
}
idleBeatResultSB.append((idleBeatResultSB.length() > 0) ? "
" : "")
- .append(I18nUtil.getString("jobconf_idleBeat") + ":").append("
address:").append(address)
- .append("
code:").append(idleBeatResult.getCode()).append("
msg:")
- .append(idleBeatResult.getMsg());
+ .append(I18nUtil.getString("jobconf_idleBeat") + ":")
+ .append("
address:")
+ .append(address)
+ .append("
code:")
+ .append(idleBeatResult.getCode())
+ .append("
msg:")
+ .append(idleBeatResult.getMsg());
// beat success
if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
index 0889e3d30415ef43089011c0f5de73bf08333dc3..f6d815188bcef792c963c0d8268eccb460166f20 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
@@ -30,8 +30,13 @@ public class ExecutorRouteFailover extends ExecutorRouter {
beatResult = new ReturnT(ReturnT.FAIL_CODE, "" + e);
}
beatResultSB.append((beatResultSB.length() > 0) ? "
" : "")
- .append(I18nUtil.getString("jobconf_beat") + ":").append("
address:").append(address)
- .append("
code:").append(beatResult.getCode()).append("
msg:").append(beatResult.getMsg());
+ .append(I18nUtil.getString("jobconf_beat") + ":")
+ .append("
address:")
+ .append(address)
+ .append("
code:")
+ .append(beatResult.getCode())
+ .append("
msg:")
+ .append(beatResult.getMsg());
// beat success
if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
index 52abfe8989d6f215cdfd1b882322679624c1e874..4c57b120d51798bb0e2850a7c9cf329950e59f8c 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
@@ -76,8 +76,9 @@ public class JobCompleteHelper {
try {
// 任务结果丢失处理:调度记录停留在 "运行中" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败;
Date losedTime = DateUtil.addMinutes(new Date(), -10);
- List losedJobIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao()
- .findLostJobIds(losedTime);
+ List losedJobIds = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .findLostJobIds(losedTime);
if (losedJobIds != null && losedJobIds.size() > 0) {
for (Long logId : losedJobIds) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
index 79863a0df23a6897e219cc7ed07e81ed7a8df1cc..dc7156b6ce5b0d3fcb9f15c87b0af10d828c1906 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
@@ -42,20 +42,23 @@ public class JobFailMonitorHelper {
while (!toStop) {
try {
- List failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao()
- .findFailJobLogIds(1000);
+ List