|
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.fdkankan.common.constant.CommonStatus;
|
|
|
import com.fdkankan.common.constant.ErrorCode;
|
|
|
import com.fdkankan.common.constant.SceneStatus;
|
|
|
+import com.fdkankan.common.constant.ServerCode;
|
|
|
import com.fdkankan.common.exception.BusinessException;
|
|
|
import com.fdkankan.common.util.AesUtil;
|
|
|
import com.fdkankan.common.util.Base64Converter;
|
|
@@ -102,135 +103,114 @@ public class CheckViewBizAuthAspect {
|
|
|
sysLog.setParams(JSON.toJSONString(params));
|
|
|
|
|
|
boolean interruptCheck = false;
|
|
|
- Integer errorCode = null;
|
|
|
- String errorMsg = null;
|
|
|
String userName = null, ip = null, timestamp = null;
|
|
|
- boolean flag = true;
|
|
|
- if(StrUtil.isNotEmpty(sign)){
|
|
|
- interruptCheck = true;
|
|
|
- sign = sign.replaceAll("%2B", "+").replaceAll(" ", "+");
|
|
|
- String[] split = null;
|
|
|
- try {
|
|
|
- String decode = AesUtil.decryptECB(sign, ENCRYPT_KEY, "AES/ECB/PKCS5Padding");
|
|
|
- split = decode.split("@");
|
|
|
-
|
|
|
- }catch (Exception e){
|
|
|
- log.error("签名解密失败", e);
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "签名解密失败";
|
|
|
- }
|
|
|
+ try {
|
|
|
+ if(StrUtil.isNotEmpty(sign)){
|
|
|
+ interruptCheck = true;
|
|
|
+ sign = sign.replaceAll("%2B", "+").replaceAll(" ", "+");
|
|
|
+ String[] split = null;
|
|
|
+ try {
|
|
|
+ String decode = AesUtil.decryptECB(sign, ENCRYPT_KEY, "AES/ECB/PKCS5Padding");
|
|
|
+ split = decode.split("@");
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("签名解密失败", e);
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "签名解密失败");
|
|
|
+ }
|
|
|
|
|
|
- if(Objects.isNull(split) || split.length == 1){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "签名参数错误";
|
|
|
- }else{
|
|
|
- for (int i = 0; i < split.length; i++){
|
|
|
- if(i == 0){
|
|
|
- userName = split[i];
|
|
|
- }
|
|
|
- if(i == 1){
|
|
|
- ip = split[i];
|
|
|
- }
|
|
|
- if(i == 2){
|
|
|
- timestamp = split[i];
|
|
|
+ if(Objects.isNull(split) || split.length == 1){
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "签名参数错误");
|
|
|
+ }else{
|
|
|
+ for (int i = 0; i < split.length; i++){
|
|
|
+ if(i == 0){
|
|
|
+ userName = split[i];
|
|
|
+ }
|
|
|
+ if(i == 1){
|
|
|
+ ip = split[i];
|
|
|
+ }
|
|
|
+ if(i == 2){
|
|
|
+ timestamp = split[i];
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if(StrUtil.isNotEmpty(ip) && !ip.equals(remoteIp)){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "ip不匹配";
|
|
|
- }
|
|
|
+ if(StrUtil.isNotEmpty(ip) && !ip.equals(remoteIp)){
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "ip不匹配");
|
|
|
+ }
|
|
|
|
|
|
- if(StrUtil.isNotEmpty(timestamp) && Calendar.getInstance().getTime().after(new Date(Long.valueOf(timestamp) * 1000))){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "超出访问截止时间";
|
|
|
+ if(StrUtil.isNotEmpty(timestamp) && Calendar.getInstance().getTime().after(new Date(Long.valueOf(timestamp) * 1000))){
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "超出访问截止时间");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- //校验token
|
|
|
- if(!interruptCheck){
|
|
|
- log.info("num:{}", num);
|
|
|
- log.info("token:{}", request.getHeader("token"));
|
|
|
- String token = request.getHeader("token");
|
|
|
- if(StrUtil.isNotEmpty(token)){
|
|
|
- SSOUser user = jmgaSSOLoginHelper.getSsoUser(token);
|
|
|
- JyUser jyUser = jyUserService.getBySysUserId(user.getId().intValue());
|
|
|
- log.info("user:{}", JSON.toJSONString(user));
|
|
|
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
|
|
|
- if(Objects.isNull(scenePlus)){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.FAILURE_CODE_5005.code();
|
|
|
- errorMsg = ErrorCode.FAILURE_CODE_5005.message();
|
|
|
- }
|
|
|
- log.info("scenePlus:{}", scenePlus);
|
|
|
- if(Objects.isNull(scenePlus.getUserId()) || Objects.isNull(jyUser) || jyUser.getUserId() != scenePlus.getUserId().intValue()){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "无权访问";
|
|
|
- }else{
|
|
|
- interruptCheck = true;
|
|
|
- userName = user.getUserName();
|
|
|
+ //校验token
|
|
|
+ if(!interruptCheck){
|
|
|
+ log.info("num:{}", num);
|
|
|
+ log.info("token:{}", request.getHeader("token"));
|
|
|
+ String token = request.getHeader("token");
|
|
|
+ if(StrUtil.isNotEmpty(token)){
|
|
|
+ SSOUser user = jmgaSSOLoginHelper.getSsoUser(token);
|
|
|
+ if(Objects.isNull(user)){
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), ErrorCode.TOKEN_NOT_FOUND.message());
|
|
|
+ }
|
|
|
+ JyUser jyUser = jyUserService.getBySysUserId(user.getId().intValue());
|
|
|
+ log.info("user:{}", JSON.toJSONString(user));
|
|
|
+ ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
|
|
|
+ if(Objects.isNull(scenePlus)){
|
|
|
+ throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
|
|
|
+ }
|
|
|
+ log.info("scenePlus:{}", scenePlus);
|
|
|
+ if(Objects.isNull(scenePlus.getUserId()) || Objects.isNull(jyUser) || jyUser.getUserId() != scenePlus.getUserId().intValue()){
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "无权访问");
|
|
|
+ }else{
|
|
|
+ interruptCheck = true;
|
|
|
+ userName = user.getUserName();
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if(!interruptCheck){
|
|
|
- //查询场景是否业务授权
|
|
|
- JySceneAuth jySceneAuth = jySceneAuthService.getByNum(num);
|
|
|
- if(!Objects.isNull(jySceneAuth) && jySceneAuth.getAuthType() == 0){
|
|
|
- //业务授权校验用户名密码
|
|
|
- userName = (String) params.get("userName");
|
|
|
- String password = (String) params.get("password");
|
|
|
- if(StrUtil.isEmpty(userName) || StrUtil.isEmpty(password)){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.USERNAME_PASSWORD_REQUIRE.code();
|
|
|
- errorMsg = ErrorCode.USERNAME_PASSWORD_REQUIRE.message();
|
|
|
- }else{
|
|
|
+ if(!interruptCheck){
|
|
|
+ //查询场景是否业务授权
|
|
|
+ JySceneAuth jySceneAuth = jySceneAuthService.getByNum(num);
|
|
|
+ if(!Objects.isNull(jySceneAuth) && jySceneAuth.getAuthType() == 0){
|
|
|
+ //业务授权校验用户名密码
|
|
|
+ userName = (String) params.get("userName");
|
|
|
+ String password = (String) params.get("password");
|
|
|
+ if(StrUtil.isEmpty(userName) || StrUtil.isEmpty(password)){
|
|
|
+ throw new BusinessException(ErrorCode.USERNAME_PASSWORD_REQUIRE);
|
|
|
+ }
|
|
|
//查询用户
|
|
|
JyUser jyUser = jyUserService.getByJyNo(userName);
|
|
|
JySceneUserAuth jySceneUserAuth = jySceneUserAuthService.getSceneViewAuth(num, jyUser.getId());
|
|
|
if(Objects.isNull(jySceneUserAuth)){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "无权访问";
|
|
|
- }else if (jySceneUserAuth.getLookAuth() == 2 && jySceneUserAuth.getLookEndTime().before(Calendar.getInstance().getTime())){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.AUTH_FAIL.code();
|
|
|
- errorMsg = "超出访问截止时间";
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "无权访问");
|
|
|
+ }
|
|
|
+ if (jySceneUserAuth.getLookAuth() == 2 && jySceneUserAuth.getLookEndTime().before(Calendar.getInstance().getTime())){
|
|
|
+ throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "超出访问截止时间");
|
|
|
}
|
|
|
|
|
|
//如果授权校验通过,校验密码是否正确
|
|
|
- if(flag){
|
|
|
- User user = userService.findByUserName(userName);
|
|
|
- //模拟前端密码加密规则生成前端密码
|
|
|
- password = SecurityUtil.MD5(Base64Converter.decode(password));
|
|
|
- //数据库密码比对
|
|
|
- if(Objects.isNull(user) || !password.equals(user.getPassword())){
|
|
|
- flag = false;
|
|
|
- errorCode = ErrorCode.PASSWORD_ERROR.code();
|
|
|
- errorMsg = ErrorCode.PASSWORD_ERROR.message();
|
|
|
- }
|
|
|
+ User user = userService.findByUserName(userName);
|
|
|
+ //模拟前端密码加密规则生成前端密码
|
|
|
+ password = SecurityUtil.MD5(Base64Converter.decode(password));
|
|
|
+ //数据库密码比对
|
|
|
+ if(Objects.isNull(user) || !password.equals(user.getPassword())){
|
|
|
+ throw new BusinessException(ErrorCode.PASSWORD_ERROR);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
+ }catch (BusinessException e){
|
|
|
+ //写入日志
|
|
|
+ sysLog.setUserName(userName);
|
|
|
+ sysLog.setResult(e.getMessage());
|
|
|
+ sysLogService.save(sysLog);
|
|
|
+ throw e;
|
|
|
}
|
|
|
-
|
|
|
//写入日志
|
|
|
sysLog.setUserName(userName);
|
|
|
- sysLog.setResult(errorMsg);
|
|
|
+ sysLog.setResult(ServerCode.SUCCESS.message());
|
|
|
sysLogService.save(sysLog);
|
|
|
-
|
|
|
- if(!flag){
|
|
|
- throw new BusinessException(errorCode, errorMsg);
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|