如何通过用户名找到为所有客户发给用户的所有令牌?
目前,org.springframework.security.oauth2.provider.token.TokenStore
仅提供一种API方法,允许username
进行令牌搜索,即findTokensByClientIdAndUserName
。
要搜索发布到所有客户端的所有令牌,需要迭代已知客户端列表。
有没有更好的方法来通过用户名获取所有令牌?
更新:在我的情况下,我使用的是RedisTokenStore
。
答案 0 :(得分:0)
适用于TokenStore#findTokensByClientIdAndUserName
的每个实现的通用解决方案是对每个注册的客户端使用ClientRegistrationService
。
如果您使用ClientRegistrationService#listClientDetails
的实现,那么您可以利用for (ClientDetails client : clientRegistrationService.listClientDetails()) {
for (final OAuth2AccessToken token : tokenStore.findTokensByClientIdAndUserName(clientId, email)) {
tokenStore.removeRefreshToken(token.getRefreshToken());
tokenStore.removeAccessToken(token);
}
}
迭代客户列表并找到发给每个客户的令牌:
ClientRegistrationService
如果您不使用clientIds
,则需要自己维护TokenStore
列表。
spring-security-oauth2
findTokensByUserName
中JdbcTokenStore
的{{1}}唯一实现是SELECT *,
CASE
WHEN currentdoctype ='PUSH' AND CurrentDocEntry = 15 THEN 'c1'
ELSE 'c2'
END AS com_con
FROM table_name
WHERE BaseDocEntry=15 AND BaseDocType='PRRH' AND ItemCode='TestStudy2'
AND WhseCode='01' AND com_con = 'c2';
。