...
|
...
|
@@ -21,6 +21,7 @@ import io.swagger.annotations.ApiOperation; |
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.messaging.handler.annotation.Header;
|
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
|
import org.springframework.validation.BindingResult;
|
...
|
...
|
@@ -29,8 +30,11 @@ import org.springframework.web.bind.annotation.*; |
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.UUID;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@RestController
|
|
|
@Slf4j
|
...
|
...
|
@@ -47,6 +51,7 @@ public class UserController { |
|
|
@Autowired
|
|
|
RedisUtils redisUtils;
|
|
|
|
|
|
|
|
|
@ApiOperation(value = "查询用户列表及信息", notes = "查询用户列表及单个用户信息")
|
|
|
@ApiImplicitParams({@ApiImplicitParam(name = "pageNum", value = "分页-当前页", required = false, dataType = "int",defaultValue = "1"),
|
|
|
@ApiImplicitParam(name = "pageSize", value = "分页-每页显示多少条", required = false, dataType = "int",defaultValue = "5")})
|
...
|
...
|
@@ -193,4 +198,72 @@ public class UserController { |
|
|
USERS userInfo = userService.getUserInfoByToken(token);
|
|
|
return new ResultJson("200","get user info success",userInfo);
|
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "给用户创建不时效的长访问token", notes = "给用户创建不时效的长访问token,方便用户进行API接口式的对接")
|
|
|
@PostMapping("creatAuthToken")
|
|
|
public ResultJson creatAuthToken(@RequestBody() USERS user){
|
|
|
if (user != null && StringUtils.isNotEmpty(user.getUsername())) {
|
|
|
UserDetails userDetails = userDetailService.loadUserByUsername(user.getUsername());
|
|
|
if (userDetails != null) {
|
|
|
String UUID_TOKEN = "sk-"+UUID.randomUUID().toString().replace("-","");
|
|
|
String tokenPrefix = "auth:api:" + user.getUsername() + ":";
|
|
|
String AUTH_TOKEN_KEY_NAME = tokenPrefix + UUID_TOKEN;
|
|
|
// 存储token值 方便后面查询及清理删除
|
|
|
redisUtils.set(tokenPrefix + "token",UUID_TOKEN);
|
|
|
|
|
|
String json = JSON.toJSONString(userDetails);
|
|
|
redisUtils.set(AUTH_TOKEN_KEY_NAME, json );
|
|
|
return new ResultJson("200", "token设置成功",AUTH_TOKEN_KEY_NAME);
|
|
|
}
|
|
|
}
|
|
|
return new ResultJson("500","token设置失败");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查看已配置用户token的接口.
|
|
|
*
|
|
|
* @param username 用户名
|
|
|
* @return token值列表或错误信息
|
|
|
*/
|
|
|
@ApiOperation(value = "查看已配置用户token的接口", notes = "查看已配置用户token的接口,方便后续清理及查询")
|
|
|
@GetMapping("viewAuthToken")
|
|
|
public ResultJson viewAuthToken(@RequestParam String username) {
|
|
|
if (StringUtils.isNotEmpty(username)) {
|
|
|
// 构造搜索的前缀,考虑到多个token可能与一个用户相关联
|
|
|
String keyName = "auth:api:" + username + ":token" ;
|
|
|
|
|
|
if (keyName != null && !keyName.isEmpty()) {
|
|
|
// 将匹配到的key值转换为token列表返回给客户端
|
|
|
String token = redisUtils.get(keyName);
|
|
|
return new ResultJson("200", "找到" + username + "的token", token);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 如果未找到任何与username相关的key,返回错误信息
|
|
|
return new ResultJson("404", "没有找到" + username + "的token");
|
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "删除用户的长访问token", notes = "根据username删除对应的用户token")
|
|
|
@PostMapping("deleteAuthToken")
|
|
|
public ResultJson deleteAuthToken(@RequestParam String username){
|
|
|
if (StringUtils.isNotEmpty(username)) {
|
|
|
// 构建token前缀
|
|
|
String tokenPrefix = "auth:api:" + username + ":";
|
|
|
|
|
|
// 尝试获取存储的token值,如果存在则删除
|
|
|
Object tokenObject = redisUtils.get(tokenPrefix + "token");
|
|
|
if (tokenObject != null) {
|
|
|
String UUID_TOKEN = (String) tokenObject;
|
|
|
String AUTH_TOKEN_KEY_NAME = tokenPrefix + UUID_TOKEN;
|
|
|
|
|
|
// 删除相关的token键
|
|
|
redisUtils.del(tokenPrefix + "token");
|
|
|
redisUtils.del(AUTH_TOKEN_KEY_NAME);
|
|
|
|
|
|
return new ResultJson("200", "token删除成功", username);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return new ResultJson("500","删除token失败,可能用户未登录或无对应token");
|
|
|
}
|
|
|
} |
...
|
...
|
|