通过用户名

时间:2018-02-27 19:54:46

标签: java spring-security spring-security-oauth2

如何通过用户名找到为所有客户发给用户的所有令牌?

目前,org.springframework.security.oauth2.provider.token.TokenStore仅提供一种API方法,允许username进行令牌搜索,即findTokensByClientIdAndUserName

要搜索发布到所有客户端的所有令牌,需要迭代已知客户端列表。

有没有更好的方法来通过用户名获取所有令牌?

更新:在我的情况下,我使用的是RedisTokenStore

1 个答案:

答案 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 findTokensByUserNameJdbcTokenStore的{​​{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';