一 远程服务调用接受参数
package pro.tjkj.zauth.client.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;
import pro.tjkj.zauth.client.config.PageSimple;
import pro.tjkj.zauth.client.config.ZAuthConfigurationProperties;
import pro.tjkj.zauth.client.dto.TreeDTO;
import pro.tjkj.zauth.client.dto.UserInfoDTO;
import pro.tjkj.zauth.client.entity.UserEntity;
import pro.tjkj.zauth.client.entity.UserGroupEntity;
import pro.tjkj.zauth.client.exception.RemoteException;
import pro.tjkj.zauth.client.service.UserAPIService;
import pro.tjkj.zauth.client.util.ZAuthContextUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
public class UserAPIServiceImpl implements UserAPIService {
private final ZAuthConfigurationProperties zAuthConfigurationProperties;
private final RestTemplate restTemplate;
public UserAPIServiceImpl(ZAuthConfigurationProperties zAuthConfigurationProperties, RestTemplate restTemplate) {
this.zAuthConfigurationProperties = zAuthConfigurationProperties;
this.restTemplate = restTemplate;
}
@Override
public UserEntity insertUser(UserInfoDTO userInfoDTO) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user", HttpMethod.POST, new HttpEntity<UserEntity>(userInfoDTO, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", UserEntity.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public void deleteUser(Collection<Long> ids) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user", HttpMethod.DELETE, new HttpEntity<Collection<Long>>(ids, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") != 200) {
throw new RemoteException(rep.getString("msg"));
}
}
@Override
public UserEntity updateUser(UserInfoDTO userInfoDTO) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user", HttpMethod.PUT, new HttpEntity<UserEntity>(userInfoDTO, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", UserEntity.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public UserEntity queryUserById(Long id) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user/" + id, HttpMethod.GET, new HttpEntity<>(null, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", UserEntity.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public PageSimple<UserInfoDTO> queryUserByPage(Integer currentPage, Integer pageSize, String group, String value) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user/?currentPage=" + currentPage + "&pageSize=" + pageSize + (group == null ? "" : "&group=" + group) + (value == null ? "" : "&value=" + value), HttpMethod.GET, new HttpEntity<>(null, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", PageSimple.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public void userRoleLink(Collection<Long> uids, Collection<Long> rids) {
HashMap<String, Collection<Long>> value = new HashMap<>();
value.put("roleIds", rids);
value.put("userIds", uids);
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user/userRole", HttpMethod.PUT, new HttpEntity<HashMap<String, Collection<Long>>>(value, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return;
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public void updateUserPassword(Long uid, String oldPwd, String newPwd) {
HashMap<String, String> value = new HashMap<>();
value.put("oPass", oldPwd);
value.put("nPass", newPwd);
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/user/password/" + uid, HttpMethod.PUT, new HttpEntity<HashMap<String, String>>(value, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return;
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public UserGroupEntity insertUserGroup(UserGroupEntity userGroupEntity) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup", HttpMethod.POST, new HttpEntity<UserGroupEntity>(userGroupEntity, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", UserGroupEntity.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public void deleteUserGroup(Collection<Long> ugIds) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup", HttpMethod.DELETE, new HttpEntity<Collection<Long>>(ugIds, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") != 200) {
throw new RemoteException(rep.getString("msg"));
}
}
@Override
public UserGroupEntity updateUserGroup(UserGroupEntity userGroupEntity) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup", HttpMethod.PUT, new HttpEntity<UserGroupEntity>(userGroupEntity, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", UserGroupEntity.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public PageSimple<UserGroupEntity> queryUserGroupByPage(Integer currentPage, Integer pageSize) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup/?currentPage=" + currentPage + "&pageSize=" + pageSize, HttpMethod.GET, new HttpEntity<>(null, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", PageSimple.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public UserGroupEntity queryUserGroupById(Long ugId) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup/" + ugId, HttpMethod.GET, new HttpEntity<>(null, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", UserGroupEntity.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public Collection<String> queryUserGroupTags(Long uid) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup/tag/" + (uid == null ? "" : "?uid=" + uid), HttpMethod.GET, new HttpEntity<>(null, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", ArrayList.class);
}
throw new RemoteException(rep.getString("msg"));
}
@Override
public Collection<TreeDTO> queryUserGroupTree(String tag) {
JSONObject rep = restTemplate.exchange(zAuthConfigurationProperties.getServerUrl() + "/v1/userGroup/tree/" + (tag == null ? "" : "?tag=" + tag), HttpMethod.GET, new HttpEntity<>(null, ZAuthContextUtil.makeSign()), JSONObject.class).getBody();
assert rep != null;
if (rep.getInteger("code") == 200) {
return rep.getObject("data", ArrayList.class);
}
throw new RemoteException(rep.getString("msg"));
}
}
二 工具类
package pro.tjkj.zauth.client.util;
import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import pro.tjkj.zauth.client.config.ZAuthConfigurationProperties;
import pro.tjkj.zauth.client.util.jwt.JWTUtil;
import javax.servlet.http.HttpServletRequest;
public class ZAuthContextUtil {
public static ZAuthConfigurationProperties zAuthConfigurationProperties;
private final JWTUtil jwtUtil;
public ZAuthContextUtil(JWTUtil jwtUtil, ZAuthConfigurationProperties zAuthConfigurationProperties) {
this.jwtUtil = jwtUtil;
ZAuthContextUtil.zAuthConfigurationProperties = zAuthConfigurationProperties;
}
public static HttpServletRequest getRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
public static String getToken() {
HttpServletRequest request = getRequest();
return request.getHeader("token");
}
public static HttpHeaders makeSign() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("appid", zAuthConfigurationProperties.getServerAppid());
String random = IdUtil.fastSimpleUUID();
httpHeaders.add("random", random);
httpHeaders.add("sign", SecureUtil.md5(zAuthConfigurationProperties.getServerAppid() + random + zAuthConfigurationProperties.getServerAppSecret()));
return httpHeaders;
}
public Long getUid() {
return Long.valueOf(getJwt().getAudience().get(0));
}
public DecodedJWT getJwt() {
return jwtUtil.verify(getToken());
}
}