UserApiController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. package me.zhengjie.modules.thirdparty.v1;
  2. import cn.hutool.http.HtmlUtil;
  3. import cn.hutool.http.HttpRequest;
  4. import cn.hutool.http.HttpUtil;
  5. import cn.hutool.http.Method;
  6. import com.alibaba.fastjson.JSONObject;
  7. import io.swagger.annotations.Api;
  8. import io.swagger.annotations.ApiOperation;
  9. import lombok.RequiredArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import me.zhengjie.annotation.Log;
  12. import me.zhengjie.annotation.rest.AnonymousGetMapping;
  13. import me.zhengjie.annotation.rest.AnonymousPostMapping;
  14. import me.zhengjie.base.BaseResponse;
  15. import me.zhengjie.base.QueryPageParams;
  16. import me.zhengjie.exception.BadRequestException;
  17. import me.zhengjie.modules.dm.user.domain.DmUser;
  18. import me.zhengjie.modules.dm.user.service.DmUserService;
  19. import me.zhengjie.modules.dm.user.service.dto.DmUserDto;
  20. import me.zhengjie.modules.dm.user.service.dto.DmUserQueryCriteria;
  21. import me.zhengjie.modules.security.config.bean.LoginProperties;
  22. import me.zhengjie.modules.security.config.bean.SecurityProperties;
  23. import me.zhengjie.modules.security.security.TokenProvider;
  24. import me.zhengjie.modules.security.service.OnlineUserService;
  25. import me.zhengjie.modules.security.service.dto.JwtUserDto;
  26. import me.zhengjie.modules.system.domain.User;
  27. import me.zhengjie.modules.system.repository.UserRepository;
  28. import me.zhengjie.modules.system.service.*;
  29. import me.zhengjie.modules.system.service.dto.*;
  30. import me.zhengjie.utils.EncryptUtils;
  31. import me.zhengjie.utils.SecurityUtils;
  32. import me.zhengjie.utils.StringUtils;
  33. import org.hibernate.Criteria;
  34. import org.springframework.data.domain.PageRequest;
  35. import org.springframework.data.domain.Pageable;
  36. import org.springframework.http.HttpStatus;
  37. import org.springframework.http.ResponseEntity;
  38. import org.springframework.security.access.prepost.PreAuthorize;
  39. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  40. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  41. import org.springframework.security.core.Authentication;
  42. import org.springframework.security.core.context.SecurityContextHolder;
  43. import org.springframework.security.crypto.password.PasswordEncoder;
  44. import org.springframework.web.bind.annotation.GetMapping;
  45. import org.springframework.web.bind.annotation.RequestBody;
  46. import org.springframework.web.bind.annotation.RequestMapping;
  47. import org.springframework.web.bind.annotation.RestController;
  48. import javax.annotation.Resource;
  49. import javax.servlet.http.HttpServletRequest;
  50. import javax.servlet.http.HttpServletResponse;
  51. import java.io.IOException;
  52. import java.text.SimpleDateFormat;
  53. import java.util.*;
  54. @Slf4j
  55. @RestController
  56. @RequiredArgsConstructor
  57. @Api(tags = "用户接口")
  58. @RequestMapping("/api/thirdparty/v1/user")
  59. public class UserApiController {
  60. private final DmUserService dmUserService;
  61. private final UserService userService;
  62. private final DeptService deptService;
  63. private final JobService jobService;
  64. private final RoleService roleService;
  65. private final TokenProvider tokenProvider;
  66. private final AuthenticationManagerBuilder authenticationManagerBuilder;
  67. private final OnlineUserService onlineUserService;
  68. private final SecurityProperties properties;
  69. @Resource
  70. private LoginProperties loginProperties;
  71. private final PasswordEncoder passwordEncoder;
  72. private final UserRepository userRepository;
  73. private final String erpapiUrl = "https://portal.caih.com";
  74. private final String key = "DMERPYT!@#$QWER2021+{:>";
  75. @Log("获取ERP用户数据")
  76. @ApiOperation("获取ERP用户数据")
  77. @AnonymousGetMapping(value = "/busi/comm/usky/queryUser")
  78. public ResponseEntity<Object> getusers(HttpServletRequest request, String formData) throws IOException {
  79. // SecurityUtils.CheckApiAuth(request);
  80. // List<DmUserDto> list = dmUserService.queryAll(criteria);
  81. String url = "/api-third-party/busi/comm/usky/queryUser";
  82. String res = HttpRequest.get(erpapiUrl+url)
  83. .header("X_AUTO_USER_INFO_HEAD", "{\"id\":\"anonymous\",\"tenantId\":\"caih\"}")
  84. .body("{\n" +
  85. " \"formData\":{\n" +
  86. " \"pageNum\":1,\n" +
  87. " \"pageSize\":100\n" +
  88. " },\n" +
  89. " \"product\":\"17\",\n" +
  90. " \"sign\":\"e34b2f59-0e9d-45ed-a32a-f4abd4381000\"\n" +
  91. "}").execute().body();
  92. JSONObject json = JSONObject.parseObject(res);
  93. return new ResponseEntity<>(json, HttpStatus.OK);
  94. }
  95. // @Log("单点登录")
  96. // @ApiOperation("单点登录")
  97. // @AnonymousGetMapping(value = "/sso")
  98. // public ResponseEntity<Object> sso(HttpServletRequest request) {
  99. // String token = request.getParameter("token");
  100. // String url = request.getParameter("url");
  101. //
  102. // if (StringUtils.isBlank(token) || StringUtils.isBlank(url)) {
  103. // throw new BadRequestException("参数错误");
  104. // }
  105. //
  106. // String res = HttpRequest.get(erpapiUrl + "/api-third-party/busi/comm/authLogin/api/verifyToken?token=" + token).execute().body();
  107. // JSONObject json = JSONObject.parseObject(res);
  108. //
  109. // if (json != null) {
  110. // JSONObject data = json.getJSONObject("data");
  111. //
  112. // if (data != null) {
  113. //
  114. // UserDto userDto = userService.findByName(data.getString("username"));
  115. //
  116. // if (userDto != null) {
  117. // UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(data.getString("username"), userDto.getPassword());
  118. // Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
  119. // SecurityContextHolder.getContext().setAuthentication(authentication);
  120. // // 生成令牌
  121. // String n_token = tokenProvider.createToken(authentication);
  122. // final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal();
  123. // // 保存在线信息
  124. // onlineUserService.save(jwtUserDto, n_token, request);
  125. // // 返回 token 与 用户信息
  126. // Map<String, Object> authInfo = new HashMap<String, Object>(2) {{
  127. // put("token", properties.getTokenStartWith() + n_token);
  128. // put("user", jwtUserDto);
  129. // }};
  130. // if (loginProperties.isSingleLogin()) {
  131. // //踢掉之前已经登录的token
  132. // onlineUserService.checkLoginOnUser(data.getString("username"), n_token);
  133. // }
  134. // return ResponseEntity.ok(authInfo);
  135. // }
  136. // }
  137. // }
  138. // throw new BadRequestException("认证失败");
  139. // }
  140. @Log("单点登录")
  141. @ApiOperation("单点登录")
  142. @AnonymousGetMapping(value = "/sso11")
  143. public BaseResponse<Object> sso11(String token) throws Exception {
  144. Map<String,Object> newToken = SecurityUtils.getToken(key);
  145. UserDto userDto = userService.findByName("chaoshengqin");
  146. //组装返回值
  147. JSONObject returnData = new JSONObject();
  148. returnData.put("nonce",newToken.get("nonce"));
  149. returnData.put("timestamp",newToken.get("timestamp"));
  150. returnData.put("token",newToken.get("token"));
  151. returnData.put("userId",userDto.getId());
  152. String cipher = EncryptUtils.desEncrypt(returnData.toJSONString());
  153. returnData.put("cipher", cipher);
  154. returnData.put("user", userDto);
  155. Map<String, Object> authInfo = new HashMap<String, Object>(1) {{
  156. put("data", returnData);
  157. }};
  158. return new BaseResponse<>(authInfo);
  159. }
  160. @Log("单点登录")
  161. @ApiOperation("单点登录")
  162. @AnonymousGetMapping(value = "/sso")
  163. public BaseResponse<Object> sso(String token) throws Exception {
  164. if (StringUtils.isBlank(token)) {
  165. throw new BadRequestException("参数错误");
  166. }
  167. String res = HttpRequest.get(erpapiUrl + "/api-third-party/busi/comm/authLogin/api/verifyToken?token=" + token).method(Method.POST).execute().body();
  168. System.out.println("res:"+res);
  169. JSONObject json = JSONObject.parseObject(res);
  170. if (json != null) {
  171. JSONObject data = json.getJSONObject("data");
  172. if (data != null) {
  173. UserDto userDto = userService.findByName(data.getString("username"));
  174. if (userDto != null) {
  175. Map<String,Object> newToken = SecurityUtils.getToken(key);
  176. //组装返回值
  177. JSONObject returnData = new JSONObject();
  178. returnData.put("nonce",newToken.get("nonce"));
  179. returnData.put("timestamp",newToken.get("timestamp"));
  180. returnData.put("token",newToken.get("token"));
  181. returnData.put("userId",userDto.getId());
  182. String cipher = EncryptUtils.desEncrypt(returnData.toJSONString());
  183. returnData.put("cipher", cipher);
  184. returnData.put("user", userDto);
  185. Map<String, Object> authInfo = new HashMap<String, Object>(1) {{
  186. put("data", returnData);
  187. }};
  188. System.out.println("returnData:"+returnData.toJSONString());
  189. return new BaseResponse<>(authInfo);
  190. }
  191. }
  192. }
  193. throw new BadRequestException("认证失败");
  194. }
  195. @Log("app登录")
  196. @ApiOperation("app登录")
  197. @AnonymousGetMapping(value = "/appLogin")
  198. public BaseResponse<Object> login(String name,String pass) throws Exception {
  199. String dataStr = passwordEncoder.encode(pass);
  200. User user = userRepository.findByUsername(name);
  201. if (user != null){
  202. boolean bo = passwordEncoder.matches(pass,dataStr);
  203. if (bo){
  204. Map<String,Object> newToken = SecurityUtils.getToken(key);
  205. //组装返回值
  206. JSONObject returnData = new JSONObject();
  207. returnData.put("nonce",newToken.get("nonce"));
  208. returnData.put("timestamp",newToken.get("timestamp"));
  209. returnData.put("token",newToken.get("token"));
  210. returnData.put("userId",user.getId());
  211. String cipher = EncryptUtils.desEncrypt(returnData.toJSONString());
  212. returnData.put("cipher", cipher);
  213. returnData.put("user", user);
  214. Map<String, Object> authInfo = new HashMap<String, Object>(1) {{
  215. put("data", returnData);
  216. }};
  217. System.out.println("returnData:"+returnData.toJSONString());
  218. return new BaseResponse<>(authInfo);
  219. }
  220. }
  221. throw new BadRequestException("登录失败!");
  222. }
  223. @Log("获取用户数据")
  224. @ApiOperation("获取用户数据")
  225. @AnonymousPostMapping(value = "/getzkusers")
  226. public BaseResponse<Object> getzkusers(@RequestBody QueryPageParams<DmUserQueryCriteria> params, Pageable pageable) {
  227. SecurityUtils.CheckApiAuth(params);
  228. Map<String, Object> list = dmUserService.queryAll(params.getQuery(), pageable);
  229. return new BaseResponse<>(list);
  230. }
  231. @Log("根据密文获取用户信息")
  232. @ApiOperation("根据密文获取用户信息")
  233. @AnonymousGetMapping(value = "/getZkUserByCipher")
  234. public BaseResponse<Object> getZkUserByCipher(String cipher) throws Exception {
  235. String dataStr = EncryptUtils.desDecrypt(cipher);
  236. JSONObject data = JSONObject.parseObject(dataStr);
  237. String token = data.getString("token");
  238. log.info("token:"+token);
  239. String timestamp = data.getString("timestamp");
  240. log.info("timestamp:"+timestamp);
  241. String nonce = data.getString("nonce");
  242. log.info("nonce:"+nonce);
  243. String userId = data.getString("userId");
  244. log.info("userId:"+userId);
  245. String[] arr = {"DMERPYT!@#$QWER2021+{:>", timestamp,nonce};
  246. Arrays.sort(arr);
  247. String str = "";
  248. for (int i = 0; i < arr.length; i++) {
  249. str += arr[i];
  250. }
  251. String newtoken = EncryptUtils.sha1(str);
  252. if (!token.equals(newtoken)) {
  253. throw new BadRequestException(HttpStatus.UNAUTHORIZED, "认证失败");
  254. }
  255. DmUserDto dmUser = dmUserService.findById(userId);
  256. return new BaseResponse<>(dmUser);
  257. }
  258. @Log("获取部门数据")
  259. @ApiOperation("获取部门数据")
  260. @AnonymousPostMapping(value = "/getzkdeps")
  261. public BaseResponse<Object> getzkdeps(@RequestBody QueryPageParams<DeptQueryNoAuthCriteria> params, Pageable pageable) {
  262. SecurityUtils.CheckApiAuth(params);
  263. Map<String, Object> list = deptService.queryAll(params.getQuery(), pageable);
  264. return new BaseResponse<>(list);
  265. }
  266. @Log("获取岗位数据")
  267. @ApiOperation("获取岗位数据")
  268. @AnonymousPostMapping(value = "/getzkjobs")
  269. public BaseResponse<Object> getzkjobs(@RequestBody QueryPageParams<JobQueryCriteria> params, Pageable pageable) {
  270. SecurityUtils.CheckApiAuth(params);
  271. Map<String, Object> list = jobService.queryAll(params.getQuery(), pageable);
  272. return new BaseResponse<>(list);
  273. }
  274. @Log("获取角色数据")
  275. @ApiOperation("获取角色数据")
  276. @AnonymousPostMapping(value = "/getzkroles")
  277. public BaseResponse<Object> getzkroles(@RequestBody QueryPageParams<RoleQueryCriteria> params, Pageable pageable) {
  278. SecurityUtils.CheckApiAuth(params);
  279. Map<String, Object> list = roleService.queryAll(params.getQuery(), pageable);
  280. return new BaseResponse<>(list);
  281. }
  282. @Log("修改人员数据")
  283. @ApiOperation("修改人员数据")
  284. @AnonymousPostMapping(value = "/updateZkUsers")
  285. public BaseResponse<Object> updateZkUsers(@RequestBody QueryPageParams<DmUser> params) {
  286. SecurityUtils.CheckApiAuth(params);
  287. System.out.println("params:"+params.getQuery().getId());
  288. dmUserService.update(params.getQuery());
  289. return new BaseResponse<>(null);
  290. }
  291. @Log("获取系统用户数据")
  292. @ApiOperation("获取系统用户数据")
  293. @AnonymousPostMapping(value = "/getZkSysUsers")
  294. public BaseResponse<Object> getZkSysUsers(@RequestBody QueryPageParams<UserQueryCriteria> params, Pageable pageable) {
  295. SecurityUtils.CheckApiAuth(params);
  296. return new BaseResponse<>(userService.queryAll(params.getQuery(), pageable));
  297. }
  298. }