...
|
...
|
@@ -11,6 +11,7 @@ import com.tianbo.warehouse.controller.response.ResultJson; |
|
|
import com.tianbo.warehouse.dao.UserRoleMapper;
|
|
|
import com.tianbo.warehouse.model.*;
|
|
|
import com.tianbo.warehouse.security.filter.JwtTokenUtil;
|
|
|
import com.tianbo.warehouse.security.login.TokenUtils;
|
|
|
import com.tianbo.warehouse.service.PermissionService;
|
|
|
import com.tianbo.warehouse.service.RoleService;
|
|
|
|
...
|
...
|
@@ -266,8 +267,77 @@ public class AnonymousController { |
|
|
*/
|
|
|
@PostMapping(value = "/userSynchronization")
|
|
|
@ResponseBody
|
|
|
public ResultMessage userSynchronization(@RequestBody Map<String, Object> map){
|
|
|
public ResultMessage userSynchronization(@RequestBody Map<String, Object> map, @RequestHeader Map<String, String> headers,HttpServletRequest request){
|
|
|
log.info("[SSO-资源同步]-参数打印:\n{}",map.toString());
|
|
|
headers.forEach((key,value)->{
|
|
|
log.info("[SSO-USER-SYNCHRONIZATION-HEADER-INFO]-key:{},value:{}",key,value);
|
|
|
});
|
|
|
|
|
|
//IP白名单
|
|
|
List<String> ipWhiteList = Arrays.asList(
|
|
|
"10.5.14.108",
|
|
|
"10.5.14.109",
|
|
|
"10.5.14.110",
|
|
|
"127.0.0.1"
|
|
|
);
|
|
|
|
|
|
String requestRemoteAddr = request.getHeader("X-Forwarded-For");
|
|
|
|
|
|
if (StringUtils.isEmpty(requestRemoteAddr)){
|
|
|
requestRemoteAddr = request.getRemoteAddr();
|
|
|
}else {
|
|
|
requestRemoteAddr = requestRemoteAddr.split(",")[0];
|
|
|
}
|
|
|
|
|
|
if (ipWhiteList.contains(requestRemoteAddr)){
|
|
|
log.info("[SSO-USER-SYNCHRONIZATION-IPWhiteList]-ipWhiteList:[{}]",requestRemoteAddr);
|
|
|
}else {
|
|
|
log.info("[SSO-USER-SYNCHRONIZATION-IPWhiteList]-ip:[{}]白名单验证失败,访问IP不在白名单内",requestRemoteAddr);
|
|
|
return new ResultMessage(400,"访问IP不在白名单内,验证失败.ip:"+requestRemoteAddr);
|
|
|
}
|
|
|
|
|
|
// 用headers Map 取值 key 键值时 key会全部转为小写 在springboot 中
|
|
|
if (headers.containsKey("once") && headers.containsKey("ts") && headers.containsKey("appkey") && headers.containsKey("signmethod") && headers.containsKey("signdata")){
|
|
|
String appAuthKey = "4768711539138560" ;
|
|
|
if (appAuthKey.equals(headers.get("appkey"))){
|
|
|
String bodyData = JSON.toJSONString(map);
|
|
|
String appPwd = "ce10ec6cc310966de5264994817a0f7c1b2b9e3b";
|
|
|
log.info("[SSO-INFO]-apppwd:{}",appPwd);
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
//签名验证格式拼接
|
|
|
|
|
|
sb.append("appKey=").append(headers.get("appkey"))
|
|
|
.append("&ts=").append(headers.get("ts"))
|
|
|
.append("&once=").append(headers.get("once"))
|
|
|
.append("&signMethod=").append(headers.get("signmethod"))
|
|
|
.append("&bodyData=").append(bodyData);
|
|
|
String signAuthURI = sb.toString();
|
|
|
// 签名生成
|
|
|
try{
|
|
|
String signData = TokenUtils.getSignature(appPwd, signAuthURI);
|
|
|
// 签名验证
|
|
|
if (signData.equals(headers.get("signdata"))){
|
|
|
log.info("[SSO-USER-SYNCHRONIZATION-HEADER-SUCCESS]-头部签名验证成功");
|
|
|
}else {
|
|
|
log.error("[SSO-USER-SYNCHRONIZATION-HEADER-AUTHFAIL]-头部签名验证失败");
|
|
|
// return new ResultMessage(400,"app签名验证失败");
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
log.error("[SSO-USER-SYNCHRONIZATION-HEADER-AUTH-ERR]-",e);
|
|
|
// return new ResultMessage(400,"app签名验证出错"+e.getMessage());
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
log.error("[SSO-USER-SYNCHRONIZATION-HEADER-FAILD],key:{},不为验证key:4768711539138560",headers.get("appKey"));
|
|
|
// return new ResultMessage(400,"appKey验证失败");
|
|
|
}
|
|
|
}else {
|
|
|
log.error("[SSO-USER-SYNCHRONIZATION-HEADER-FAILD]-缺少必要头部验证信息");
|
|
|
// return new ResultMessage(400,"缺少必要头部验证信息,app验证失败");
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//获取action的值,判断是push数据还是删除数据
|
|
|
String action = map.get("action").toString();
|
|
|
if ("user".equals(map.get("resType").toString())){
|
...
|
...
|
|