/**
* 在线用户
*
*<hr>
* @author hanjidong
* @date 2022年5月17日 下午3:47:45
* @since 0.0.1
* @param tokenId
* @param request
* @param response
* @return
* Object
*/
@ApiOperation("获取在线用户")
@RequestMapping(value = "/onlineUser", method = RequestMethod.GET)
public Object onlineUser(HttpServletRequest request,
HttpServletResponse response){
return MessageResult.OK(sysUserService.onLineUser());
}
/**
* 强制退出用户
*
*<hr>
* @author hanjidong
* @date 2022年5月17日 下午3:47:45
* @since 0.0.1
* @param tokenId
* @param request
* @param response
* @return
* Object
*/
@ApiOperation("强制退出用户")
@RequestMapping(value = "/forceQuitUser", method = RequestMethod.GET)
public Object onlineUser(@RequestParam String userId, HttpServletRequest request,
HttpServletResponse response){
sysUserService.quitUser(userId);
return MessageResult.OK();
}
@Override
public List<SysUser> onLineUser() {
List<SysUser> users = new ArrayList<>();
List<String> userIds = new ArrayList<>();
//获取tokensotre对象
TokenStore tokenStore= getTokenStore();
Collection<OAuth2AccessToken> findTokensByClientId = tokenStore.findTokensByClientId("client_1");
for (OAuth2AccessToken oAuth2AccessToken : findTokensByClientId) {
OAuth2Authentication readAuthentication = tokenStore.readAuthentication(oAuth2AccessToken);
if(readAuthentication == null || readAuthentication.getPrincipal() == null){
continue;
}
if(readAuthentication.getPrincipal() instanceof SyswareUserDetails){
SyswareUserDetails userDetail = (SyswareUserDetails)readAuthentication.getPrincipal();
Long userId = userDetail.getUserId();
if(!userIds.contains(String.valueOf(userId))){
SysUser user = new SysUser();
user.setUserId(userDetail.getUserId());
user.setName(userDetail.getLoginName());
users.add(user);
userIds.add(String.valueOf(userDetail.getUserId()));
}
}
}
return users;
}
/* (non-Javadoc)
* @see com.sysware.framework.module.user.service.ISysUserService#onLineUser()
*/
@Override
public void quitUser(String userId) {
//获取tokensotre对象
TokenStore tokenStore= getTokenStore();
Collection<OAuth2AccessToken> findTokensByClientId = tokenStore.findTokensByClientId("client_1");
for (OAuth2AccessToken oAuth2AccessToken : findTokensByClientId) {
OAuth2Authentication readAuthentication = tokenStore.readAuthentication(oAuth2AccessToken);
if(readAuthentication == null || readAuthentication.getPrincipal() == null){
continue;
}
if(readAuthentication.getPrincipal() instanceof SyswareUserDetails){
SyswareUserDetails userDetail = (SyswareUserDetails)readAuthentication.getPrincipal();
if(String.valueOf(userDetail.getUserId()).equals(userId)){
tokenStore.removeAccessToken(oAuth2AccessToken);
}
}
}
}
private TokenStore getTokenStore(){
if(OauthTokenStoreEnum.REDIS.getCode().equals(tokenStoreType)){
RedisTokenStore tokenStore=(RedisTokenStore)SystemContext.getBean("tokenStore");
return tokenStore;
}
return OauthTokenStoreEnum.DB.getCode().equals(tokenStoreType)? (JdbcTokenStore)SystemContext.getBean("tokenStore"): (InMemoryTokenStore)SystemContext.getBean("tokenStore");
}