|
|
@@ -1,9 +1,16 @@
|
|
|
package com.kxs.common.security.service;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.kxs.common.security.model.KxsSecurityUser;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.springframework.asm.Attribute;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
|
|
import org.springframework.lang.Nullable;
|
|
|
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
|
+import org.springframework.security.core.Authentication;
|
|
|
+import org.springframework.security.core.userdetails.UserDetails;
|
|
|
import org.springframework.security.oauth2.core.OAuth2AccessToken;
|
|
|
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
|
|
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
|
|
|
@@ -13,9 +20,13 @@ import org.springframework.security.oauth2.server.authorization.OAuth2Authorizat
|
|
|
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
|
|
|
import org.springframework.util.Assert;
|
|
|
|
|
|
+import java.nio.file.attribute.UserPrincipal;
|
|
|
+import java.security.KeyStore;
|
|
|
+import java.security.Principal;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@@ -73,6 +84,17 @@ public class KxsRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
|
|
|
redisTemplate.opsForValue()
|
|
|
.set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()), authorization, between,
|
|
|
TimeUnit.SECONDS);
|
|
|
+ //TODO 登陆后根据token保存用户ID,仅限同步数据时使用,后续会删除
|
|
|
+ Object attribute = authorization.getAttribute("java.security.Principal");
|
|
|
+ if(attribute instanceof UsernamePasswordAuthenticationToken authenticationToken){
|
|
|
+ Object principal = authenticationToken.getPrincipal();
|
|
|
+ if (principal instanceof KxsSecurityUser userDetails) {
|
|
|
+ redisTemplate.opsForValue()
|
|
|
+ .set(accessToken.getTokenValue(), userDetails.getId(), between,
|
|
|
+ TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|