diff --git a/src/main/java/com/example/oauth2/test2/AuthorizationServerConfig.java b/src/main/java/com/example/oauth2/test2/AuthorizationServerConfig.java index 27d85960d485b53f5521678254a59ddd22d57c19..ef216cfa67dd2a2352f0e09f58ef7c4fad648c06 100644 --- a/src/main/java/com/example/oauth2/test2/AuthorizationServerConfig.java +++ b/src/main/java/com/example/oauth2/test2/AuthorizationServerConfig.java @@ -40,6 +40,8 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap private ClientDetailsService clientDetailsService; @Resource private TokenStore tokenStore; + @Resource + private CustomTokenEnhancer customTokenEnhancer; /** @@ -63,6 +65,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap service.setSupportRefreshToken(true); service.setClientDetailsService(clientDetailsService); service.setTokenStore(tokenStore); + service.setTokenEnhancer(customTokenEnhancer); service.setAccessTokenValiditySeconds(7200); // 令牌默认有效期2小时 //service.setRefreshTokenValiditySeconds(259200); // 刷新令牌默认有效期3天 return service; diff --git a/src/main/java/com/example/oauth2/test2/CustomTokenEnhancer.java b/src/main/java/com/example/oauth2/test2/CustomTokenEnhancer.java new file mode 100644 index 0000000000000000000000000000000000000000..af2312e59038ac4868e03be3ec8b102f3ddcbb57 --- /dev/null +++ b/src/main/java/com/example/oauth2/test2/CustomTokenEnhancer.java @@ -0,0 +1,40 @@ +package com.example.oauth2.test2; + +import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; +import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.common.OAuth2RefreshToken; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.token.TokenEnhancer; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Component +public class CustomTokenEnhancer implements TokenEnhancer { + @Override + public OAuth2AccessToken enhance(OAuth2AccessToken accessToken,OAuth2Authentication authentication) { + if (accessToken instanceof DefaultOAuth2AccessToken) { + DefaultOAuth2AccessToken token = ((DefaultOAuth2AccessToken) accessToken); + token.setValue(getNewToken()); + OAuth2RefreshToken refreshToken = token.getRefreshToken(); + if (refreshToken instanceof DefaultOAuth2RefreshToken) { + token.setRefreshToken(new DefaultOAuth2RefreshToken(getNewToken())); + } + Map additionalInformation = new HashMap(); + //自定义返回的拓展字段 + additionalInformation.put("client_id", authentication.getOAuth2Request().getClientId()); + additionalInformation.put("custom_key", "custom_key"); + additionalInformation.put("username", authentication.getOAuth2Request().getRequestParameters().get("username")); + + token.setAdditionalInformation(additionalInformation); + return token; + } + return accessToken; + } + private String getNewToken() { + return "自定义token" + UUID.randomUUID().toString().replace("-", ""); + } +} diff --git a/src/main/java/com/example/oauth2/test2/UserDetailsServiceImpl.java b/src/main/java/com/example/oauth2/test2/UserDetailsServiceImpl.java index ef2cd05035a665a6539674c463552c39b9efb13c..2fbde05f6346cdcf8cbe29cb5c914c6f11bb1c9f 100644 --- a/src/main/java/com/example/oauth2/test2/UserDetailsServiceImpl.java +++ b/src/main/java/com/example/oauth2/test2/UserDetailsServiceImpl.java @@ -10,8 +10,6 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -33,9 +31,6 @@ public class UserDetailsServiceImpl implements UserDetailsService { */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - - OAuth2AccessToken oAuth2AccessToken = new RedisTokenStore(redisConnectionFactory).readAccessToken("7a99cc45-42ce-4447-acbe-f30756dde928"); - System.out.println(oAuth2AccessToken); //登录账号 logger.info("当前登录用户:username:{} 登录时间:{}", username, new Date()); // 根据账号去数据库查询...