mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-14 14:19:08 +08:00
♻️ 重构代码。 重构token TokenEnhancer
This commit is contained in:
1 parent
b7b414b3f2
commit
75a9e98c4b
9 files changed
+77
-39
No files matched your search
+2
-31
@@ -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.data.tenant.TenantContextHolder;
|
||||||
import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator;
|
import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator;
|
||||||
import com.pig4cloud.pigx.common.security.service.PigxClientDetailsService;
|
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 com.pig4cloud.pigx.common.security.service.PigxUserDetailsService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
@@ -33,7 +32,6 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.security.authentication.AuthenticationManager;
|
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.configurers.ClientDetailsServiceConfigurer;
|
||||||
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
|
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
|
||||||
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
|
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 org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author lengleng
|
* @author lengleng
|
||||||
@@ -59,6 +55,7 @@ import java.util.Map;
|
|||||||
@EnableAuthorizationServer
|
@EnableAuthorizationServer
|
||||||
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
|
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
|
||||||
private final DataSource dataSource;
|
private final DataSource dataSource;
|
||||||
|
private final TokenEnhancer pigxTokenEnhancer;
|
||||||
private final PigxUserDetailsService pigxUserDetailsService;
|
private final PigxUserDetailsService pigxUserDetailsService;
|
||||||
private final AuthenticationManager authenticationManagerBean;
|
private final AuthenticationManager authenticationManagerBean;
|
||||||
private final RedisConnectionFactory redisConnectionFactory;
|
private final RedisConnectionFactory redisConnectionFactory;
|
||||||
@@ -84,7 +81,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
|
|||||||
endpoints
|
endpoints
|
||||||
.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
|
.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
|
||||||
.tokenStore(tokenStore())
|
.tokenStore(tokenStore())
|
||||||
.tokenEnhancer(tokenEnhancer())
|
.tokenEnhancer(pigxTokenEnhancer)
|
||||||
.userDetailsService(pigxUserDetailsService)
|
.userDetailsService(pigxUserDetailsService)
|
||||||
.authenticationManager(authenticationManagerBean)
|
.authenticationManager(authenticationManagerBean)
|
||||||
.reuseRefreshTokens(false)
|
.reuseRefreshTokens(false)
|
||||||
@@ -105,30 +102,4 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
|
|||||||
});
|
});
|
||||||
return tokenStore;
|
return tokenStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* token增强,客户端模式不增强。
|
|
||||||
*
|
|
||||||
* @return TokenEnhancer
|
|
||||||
*/
|
|
||||||
@Bean
|
|
||||||
public TokenEnhancer tokenEnhancer() {
|
|
||||||
return (accessToken, authentication) -> {
|
|
||||||
if (SecurityConstants.CLIENT_CREDENTIALS
|
|
||||||
.equals(authentication.getOAuth2Request().getGrantType())) {
|
|
||||||
return accessToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Map<String, Object> 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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -51,5 +51,11 @@
|
|||||||
<artifactId>elastic-job-lite-spring</artifactId>
|
<artifactId>elastic-job-lite-spring</artifactId>
|
||||||
<version>${elastic-job-lite.version}</version>
|
<version>${elastic-job-lite.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!--xxl job-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.xuxueli</groupId>
|
||||||
|
<artifactId>xxl-job-core</artifactId>
|
||||||
|
<version>${xxl.job.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
+2
-2
@@ -25,12 +25,12 @@ import java.lang.annotation.*;
|
|||||||
/**
|
/**
|
||||||
* @author lengleng
|
* @author lengleng
|
||||||
* @date 2018/7/24
|
* @date 2018/7/24
|
||||||
* 开启pigx job
|
* 开启pigx elastic job
|
||||||
*/
|
*/
|
||||||
@Target({ElementType.TYPE})
|
@Target({ElementType.TYPE})
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Documented
|
@Documented
|
||||||
@Inherited
|
@Inherited
|
||||||
@Import({ElasticJobAutoConfiguration.class})
|
@Import({ElasticJobAutoConfiguration.class})
|
||||||
public @interface EnablePigxJob {
|
public @interface EnablePigxElasticJob {
|
||||||
}
|
}
|
||||||
+63
@@ -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
|
||||||
|
* <p>
|
||||||
|
* 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<String, Object> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
-2
@@ -35,7 +35,6 @@ import org.springframework.security.core.GrantedAuthority;
|
|||||||
import org.springframework.security.core.authority.AuthorityUtils;
|
import org.springframework.security.core.authority.AuthorityUtils;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -48,7 +47,6 @@ import java.util.Set;
|
|||||||
* @author lengleng
|
* @author lengleng
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class PigxUserDetailsServiceImpl implements PigxUserDetailsService {
|
public class PigxUserDetailsServiceImpl implements PigxUserDetailsService {
|
||||||
private final RemoteUserService remoteUserService;
|
private final RemoteUserService remoteUserService;
|
||||||
|
|||||||
-2
@@ -50,8 +50,6 @@ public class SecurityUtils {
|
|||||||
* @param authentication
|
* @param authentication
|
||||||
* @return PigxUser
|
* @return PigxUser
|
||||||
* <p>
|
* <p>
|
||||||
* 获取当前用户的全部信息 EnablePigxResourceServer true
|
|
||||||
* 获取当前用户的用户名 EnablePigxResourceServer false
|
|
||||||
*/
|
*/
|
||||||
public PigxUser getUser(Authentication authentication) {
|
public PigxUser getUser(Authentication authentication) {
|
||||||
Object principal = authentication.getPrincipal();
|
Object principal = authentication.getPrincipal();
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
org.springframework.cloud.openfeign.PigxHystrixFeignTargeterConfiguration,\
|
org.springframework.cloud.openfeign.PigxHystrixFeignTargeterConfiguration,\
|
||||||
com.pig4cloud.pigx.common.security.component.GlobalExceptionHandlerResolver,\
|
com.pig4cloud.pigx.common.security.component.GlobalExceptionHandlerResolver,\
|
||||||
|
com.pig4cloud.pigx.common.security.component.PigxTokenEnhancer,\
|
||||||
com.pig4cloud.pigx.common.security.service.PigxUserDetailsServiceImpl
|
com.pig4cloud.pigx.common.security.service.PigxUserDetailsServiceImpl
|
||||||
+2
-2
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
package com.pig4cloud.pigx.daemon.elastic;
|
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.EnablePigxFeignClients;
|
||||||
import com.pig4cloud.pigx.common.security.annotation.EnablePigxResourceServer;
|
import com.pig4cloud.pigx.common.security.annotation.EnablePigxResourceServer;
|
||||||
import com.pig4cloud.pigx.common.swagger.annotation.EnablePigxSwagger2;
|
import com.pig4cloud.pigx.common.swagger.annotation.EnablePigxSwagger2;
|
||||||
@@ -29,7 +29,7 @@ import org.springframework.cloud.client.SpringCloudApplication;
|
|||||||
* @date 2018/7/24
|
* @date 2018/7/24
|
||||||
* 分布式任务调度模块
|
* 分布式任务调度模块
|
||||||
*/
|
*/
|
||||||
@EnablePigxJob
|
@EnablePigxXxlJob
|
||||||
@EnablePigxSwagger2
|
@EnablePigxSwagger2
|
||||||
@EnablePigxFeignClients
|
@EnablePigxFeignClients
|
||||||
@SpringCloudApplication
|
@SpringCloudApplication
|
||||||
|
|||||||
@@ -63,6 +63,7 @@
|
|||||||
<minio.version>6.0.8</minio.version>
|
<minio.version>6.0.8</minio.version>
|
||||||
<fastjson.version>1.2.58</fastjson.version>
|
<fastjson.version>1.2.58</fastjson.version>
|
||||||
<elastic-job-lite.version>2.1.5</elastic-job-lite.version>
|
<elastic-job-lite.version>2.1.5</elastic-job-lite.version>
|
||||||
|
<xxl.job.version>2.1.0</xxl.job.version>
|
||||||
<security.oauth.version>2.3.6.RELEASE</security.oauth.version>
|
<security.oauth.version>2.3.6.RELEASE</security.oauth.version>
|
||||||
<activiti.version>5.22.0</activiti.version>
|
<activiti.version>5.22.0</activiti.version>
|
||||||
<docker.url>http://192.168.0.13:4243</docker.url>
|
<docker.url>http://192.168.0.13:4243</docker.url>
|
||||||
|
|||||||
Reference in new issue
Block a user