From 75a9e98c4b4e19490d72ade7d1301d7b8a0b404e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 18 Sep 2019 17:27:54 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=82=20=E9=87=8D=E6=9E=84token=20TokenEnhancer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/AuthorizationServerConfig.java | 33 +--------- pigx-common/pigx-common-job/pom.xml | 6 ++ ...PigxJob.java => EnablePigxElasticJob.java} | 4 +- .../security/component/PigxTokenEnhancer.java | 63 +++++++++++++++++++ .../service/PigxUserDetailsServiceImpl.java | 2 - .../common/security/util/SecurityUtils.java | 2 - .../main/resources/META-INF/spring.factories | 1 + .../PigxDaemonElasticJobApplication.java | 4 +- pom.xml | 1 + 9 files changed, 77 insertions(+), 39 deletions(-) rename pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/{EnablePigxJob.java => EnablePigxElasticJob.java} (94%) create mode 100644 pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenEnhancer.java diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index d79579949..2827b3603 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -24,7 +24,6 @@ import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator; import com.pig4cloud.pigx.common.security.service.PigxClientDetailsService; -import com.pig4cloud.pigx.common.security.service.PigxUser; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; import lombok.AllArgsConstructor; import lombok.SneakyThrows; @@ -33,7 +32,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; @@ -46,8 +44,6 @@ import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; import javax.sql.DataSource; -import java.util.HashMap; -import java.util.Map; /** * @author lengleng @@ -59,6 +55,7 @@ import java.util.Map; @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { private final DataSource dataSource; + private final TokenEnhancer pigxTokenEnhancer; private final PigxUserDetailsService pigxUserDetailsService; private final AuthenticationManager authenticationManagerBean; private final RedisConnectionFactory redisConnectionFactory; @@ -84,7 +81,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap endpoints .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) .tokenStore(tokenStore()) - .tokenEnhancer(tokenEnhancer()) + .tokenEnhancer(pigxTokenEnhancer) .userDetailsService(pigxUserDetailsService) .authenticationManager(authenticationManagerBean) .reuseRefreshTokens(false) @@ -105,30 +102,4 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap }); return tokenStore; } - - /** - * token增强,客户端模式不增强。 - * - * @return TokenEnhancer - */ - @Bean - public TokenEnhancer tokenEnhancer() { - return (accessToken, authentication) -> { - if (SecurityConstants.CLIENT_CREDENTIALS - .equals(authentication.getOAuth2Request().getGrantType())) { - return accessToken; - } - - final Map additionalInfo = new HashMap<>(8); - PigxUser pigxUser = (PigxUser) authentication.getUserAuthentication().getPrincipal(); - additionalInfo.put(SecurityConstants.DETAILS_USER_ID, pigxUser.getId()); - additionalInfo.put(SecurityConstants.DETAILS_USERNAME, pigxUser.getUsername()); - additionalInfo.put(SecurityConstants.DETAILS_DEPT_ID, pigxUser.getDeptId()); - additionalInfo.put(SecurityConstants.DETAILS_TENANT_ID, pigxUser.getTenantId()); - additionalInfo.put(SecurityConstants.DETAILS_LICENSE, SecurityConstants.PIGX_LICENSE); - additionalInfo.put(SecurityConstants.ACTIVE, Boolean.TRUE); - ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo); - return accessToken; - }; - } } diff --git a/pigx-common/pigx-common-job/pom.xml b/pigx-common/pigx-common-job/pom.xml index 0f1b46e1f..335c8243f 100644 --- a/pigx-common/pigx-common-job/pom.xml +++ b/pigx-common/pigx-common-job/pom.xml @@ -51,5 +51,11 @@ elastic-job-lite-spring ${elastic-job-lite.version} + + + com.xuxueli + xxl-job-core + ${xxl.job.version} + diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxJob.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxElasticJob.java similarity index 94% rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxJob.java rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxElasticJob.java index 388c17813..bd1d92460 100644 --- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxJob.java +++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxElasticJob.java @@ -25,12 +25,12 @@ import java.lang.annotation.*; /** * @author lengleng * @date 2018/7/24 - * 开启pigx job + * 开启pigx elastic job */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import({ElasticJobAutoConfiguration.class}) -public @interface EnablePigxJob { +public @interface EnablePigxElasticJob { } diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenEnhancer.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenEnhancer.java new file mode 100644 index 000000000..a6f50acf1 --- /dev/null +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenEnhancer.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.common.security.component; + +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.security.service.PigxUser; +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.token.TokenEnhancer; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author lengleng + * @date 2019-09-17 + *

+ * token增强,客户端模式不增强。 + */ +public class PigxTokenEnhancer implements TokenEnhancer { + /** + * Provides an opportunity for customization of an access token (e.g. through its additional information map) during + * the process of creating a new token for use by a client. + * + * @param accessToken the current access token with its expiration and refresh token + * @param authentication the current authentication including client and user details + * @return a new token enhanced with additional information + */ + @Override + public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { + if (SecurityConstants.CLIENT_CREDENTIALS + .equals(authentication.getOAuth2Request().getGrantType())) { + return accessToken; + } + + final Map additionalInfo = new HashMap<>(8); + PigxUser pigxUser = (PigxUser) authentication.getUserAuthentication().getPrincipal(); + additionalInfo.put(SecurityConstants.DETAILS_USER_ID, pigxUser.getId()); + additionalInfo.put(SecurityConstants.DETAILS_USERNAME, pigxUser.getUsername()); + additionalInfo.put(SecurityConstants.DETAILS_DEPT_ID, pigxUser.getDeptId()); + additionalInfo.put(SecurityConstants.DETAILS_TENANT_ID, pigxUser.getTenantId()); + additionalInfo.put(SecurityConstants.DETAILS_LICENSE, SecurityConstants.PIGX_LICENSE); + additionalInfo.put(SecurityConstants.ACTIVE, Boolean.TRUE); + ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo); + return accessToken; + } +} diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java index 1c5fdd18a..819269f59 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java @@ -35,7 +35,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.Collection; @@ -48,7 +47,6 @@ import java.util.Set; * @author lengleng */ @Slf4j -@Service @AllArgsConstructor public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { private final RemoteUserService remoteUserService; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/SecurityUtils.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/SecurityUtils.java index 57abc369e..6ba0e3419 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/SecurityUtils.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/SecurityUtils.java @@ -50,8 +50,6 @@ public class SecurityUtils { * @param authentication * @return PigxUser *

- * 获取当前用户的全部信息 EnablePigxResourceServer true - * 获取当前用户的用户名 EnablePigxResourceServer false */ public PigxUser getUser(Authentication authentication) { Object principal = authentication.getPrincipal(); diff --git a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories index 23129a178..aaa6823bd 100644 --- a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories @@ -1,4 +1,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.openfeign.PigxHystrixFeignTargeterConfiguration,\ com.pig4cloud.pigx.common.security.component.GlobalExceptionHandlerResolver,\ + com.pig4cloud.pigx.common.security.component.PigxTokenEnhancer,\ com.pig4cloud.pigx.common.security.service.PigxUserDetailsServiceImpl diff --git a/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java b/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java index 50a603658..d31f9fe51 100644 --- a/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java +++ b/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java @@ -17,7 +17,7 @@ package com.pig4cloud.pigx.daemon.elastic; -import com.pig4cloud.pigx.common.job.annotation.EnablePigxJob; +import com.pig4cloud.pigx.common.job.annotation.EnablePigxXxlJob; import com.pig4cloud.pigx.common.security.annotation.EnablePigxFeignClients; import com.pig4cloud.pigx.common.security.annotation.EnablePigxResourceServer; import com.pig4cloud.pigx.common.swagger.annotation.EnablePigxSwagger2; @@ -29,7 +29,7 @@ import org.springframework.cloud.client.SpringCloudApplication; * @date 2018/7/24 * 分布式任务调度模块 */ -@EnablePigxJob +@EnablePigxXxlJob @EnablePigxSwagger2 @EnablePigxFeignClients @SpringCloudApplication diff --git a/pom.xml b/pom.xml index 42fc76b2f..abaaaf8fc 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,7 @@ 6.0.8 1.2.58 2.1.5 + 2.1.0 2.3.6.RELEASE 5.22.0 http://192.168.0.13:4243