Browse Source

修复:界面短信发送不能用的问题

master
wxz 5 years ago
parent
commit
ace875171d
  1. 17
      epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java
  2. 33
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java
  3. 62
      epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java
  4. 62
      epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java
  5. 45
      epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java
  6. 4
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/SysSmsEntity.java
  7. 10
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java

17
epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java

@ -17,8 +17,10 @@ import com.epmet.commons.mybatis.enums.EpmetDelFlagEnum;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.security.user.SecurityUser;
import com.epmet.commons.tools.security.user.UserDetail;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@ -40,21 +42,24 @@ public class FieldMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
UserDetail user = SecurityUser.getUser();
Date date = new Date();
if (metaObject.getOriginalObject() instanceof BaseEpmetEntity) {
String userId = user == null ? Constant.APP_USER_FLAG : String.valueOf(user.getId());
Long deptId = user == null ? null : user.getDeptId();
String loginUserId = LoginUserUtil.getLoginUserId();
// epmet项目新增的
loginUserId = StringUtils.isBlank(loginUserId) ? Constant.APP_USER_FLAG : loginUserId;
//Long deptId = user == null ? null : user.getDeptId();
setFieldValByName(FieldConstant.CREATED_TIME_HUMP, date, metaObject);
setFieldValByName(FieldConstant.CREATED_BY_HUMP, userId, metaObject);
setFieldValByName(FieldConstant.CREATED_BY_HUMP, loginUserId, metaObject);
setFieldValByName(FieldConstant.UPDATED_TIME_HUMP, date, metaObject);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, userId, metaObject);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, loginUserId, metaObject);
setFieldValByName(FieldConstant.REVISION_HUMP, NumConstant.ZERO, metaObject);
//删除标识
setFieldValByName(FieldConstant.DEL_FLAG_HUMP, EpmetDelFlagEnum.NORMAL.value(), metaObject);
// 数据权限标志
setInsertFieldValByName(DEPT_ID, deptId, metaObject);
//setInsertFieldValByName(DEPT_ID, deptId, metaObject);
} else {
UserDetail user = SecurityUser.getUser();
// renren自带的
if (user == null) {
return;
}

33
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java

@ -0,0 +1,33 @@
package com.epmet.commons.tools.security.user;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.utils.HttpContextUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* 登录用户相关工具
*/
public class LoginUserUtil {
/**
* 查询登录用户的id
* @return
*/
public static String getLoginUserId() {
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
if (request == null) {
return null;
}
String userId = request.getHeader(Constant.USER_KEY);
if (StringUtils.isBlank(userId)) {
return null;
}
return userId;
}
}

62
epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java

@ -38,7 +38,7 @@ import java.util.List;
* @since 1.0.0
*/
@Component("CpAuth")
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpAuthGatewayFilterFactory.CpAuthConfig> {
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpAuthGatewayFilterFactory.CpAuthConfig> implements UserTokenFilter {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private CpProperty cpProperty;
@ -90,7 +90,7 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
}
try {
//当前登录用户userId,添加到header中
TokenDto user = this.getLoginUserInfo(token);
TokenDto user = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis);
if (user != null) {
String redisKey = user.getApp() + "-" + user.getClient() + "-" + user.getUserId();
logger.info("redisKey=" + redisKey);
@ -105,35 +105,35 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpA
};
}
public TokenDto getLoginUserInfo(String token) {
//是否过期
Claims claims = jwtTokenUtils.getClaimByToken(token);
if (claims == null || jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
throw new RenException(ErrorCode.ERR401.getCode(),ErrorCode.ERR401.getMsg());
}
//获取用户ID
String app = (String) claims.get("app");
String client = (String) claims.get("client");
String userId = (String) claims.get("userId");
//查询Redis
TokenDto tokenDto = cpUserDetailRedis.get(app, client, userId);
if (null == tokenDto) {
//说明登录状态时效(超时)
throw new RenException(ErrorCode.ERR10006.getCode(),ErrorCode.ERR10006.getMsg());
}else{
//Redis中存在数据,取出token,进行比对
if(StringUtils.equals(tokenDto.getToken(),token)){
//用户携带token与Redis中一致
}else{
//用户携带token与Redis中不一致,说明当前用户此次会话失效,提示重新登陆
throw new RenException(ErrorCode.ERR10007.getCode(),ErrorCode.ERR10007.getMsg());
}
}
return tokenDto;
}
//public TokenDto getLoginUserInfo(String token) {
// //是否过期
// Claims claims = jwtTokenUtils.getClaimByToken(token);
// if (claims == null || jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
// throw new RenException(ErrorCode.ERR401.getCode(),ErrorCode.ERR401.getMsg());
// }
// //获取用户ID
// String app = (String) claims.get("app");
// String client = (String) claims.get("client");
// String userId = (String) claims.get("userId");
// //查询Redis
// TokenDto tokenDto = cpUserDetailRedis.get(app, client, userId);
// if (null == tokenDto) {
// //说明登录状态时效(超时)
// throw new RenException(ErrorCode.ERR10006.getCode(),ErrorCode.ERR10006.getMsg());
// }else{
// //Redis中存在数据,取出token,进行比对
// if(StringUtils.equals(tokenDto.getToken(),token)){
// //用户携带token与Redis中一致
//
// }else{
// //用户携带token与Redis中不一致,说明当前用户此次会话失效,提示重新登陆
// throw new RenException(ErrorCode.ERR10007.getCode(),ErrorCode.ERR10007.getMsg());
// }
//
// }
//
// return tokenDto;
//}
private Mono<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);

62
epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java

@ -0,0 +1,62 @@
package com.epmet.filter;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.jwt.JwtTokenUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* Feign调用发送请求的Filter
* 目前用于封装用户相关信息到request供上游微服务使用
*/
@Component
public class FeignRequestFilter implements GlobalFilter, UserTokenFilter {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private JwtTokenUtils jwtTokenUtils;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders headers = request.getHeaders();
String token = headers.getFirst(Constant.AUTHORIZATION_HEADER);
if (StringUtils.isBlank(token)) {
token = headers.getFirst(Constant.TOKEN_HEADER);
logger.info("token=" + token);
} else {
logger.info("authorization=" + token);
}
if (StringUtils.isBlank(token)) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
logger.info("params token:" + token);
}
if (StringUtils.isBlank(token)) {
return chain.filter(exchange);
}
TokenDto loginUserInfo = getLoginUserInfoByToken(token, jwtTokenUtils, cpUserDetailRedis);
if (loginUserInfo != null) {
ServerHttpRequest build = exchange.getRequest().mutate()
.header(Constant.USER_KEY, new String[]{loginUserInfo.getUserId()}).build();
return chain.filter(exchange.mutate().request(build).build());
}
return chain.filter(exchange);
}
}

45
epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java

@ -0,0 +1,45 @@
package com.epmet.filter;
import com.epmet.common.token.enums.ErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.jwt.JwtTokenUtils;
import io.jsonwebtoken.Claims;
/**
* 用户token的过滤器接口提供通用的默认方法
*/
public interface UserTokenFilter {
default TokenDto getLoginUserInfoByToken(String token, JwtTokenUtils jwtTokenUtils, CpUserDetailRedis cpUserDetailRedis) {
//是否过期
Claims claims = jwtTokenUtils.getClaimByToken(token);
if (claims == null || jwtTokenUtils.isTokenExpired(claims.getExpiration())) {
throw new RenException(ErrorCode.ERR401.getCode(),ErrorCode.ERR401.getMsg());
}
//获取用户ID
String app = (String) claims.get("app");
String client = (String) claims.get("client");
String userId = (String) claims.get("userId");
//查询Redis
TokenDto tokenDto = cpUserDetailRedis.get(app, client, userId);
//if (null == tokenDto) {
// //说明登录状态时效(超时)
// throw new RenException(ErrorCode.ERR10006.getCode(),ErrorCode.ERR10006.getMsg());
//}else{
// //Redis中存在数据,取出token,进行比对
// if(StringUtils.equals(tokenDto.getToken(),token)){
// //用户携带token与Redis中一致
//
// }else{
// //用户携带token与Redis中不一致,说明当前用户此次会话失效,提示重新登陆
// throw new RenException(ErrorCode.ERR10007.getCode(),ErrorCode.ERR10007.getMsg());
// }
//
//}
return tokenDto;
}
}

4
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/SysSmsEntity.java

@ -10,7 +10,7 @@ package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEntity;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -22,7 +22,7 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("sys_sms")
public class SysSmsEntity extends BaseEntity {
public class SysSmsEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**

10
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java

@ -96,13 +96,7 @@ public class SysSmsServiceImpl extends BaseServiceImpl<SysSmsDao, SysSmsEntity>
}
sms.setStatus(status);
sms.setCreateDate(new Date());
baseDao.tempInsert(sms.getPlatform(),
sms.getMobile(),
sms.getParams1(),
sms.getParams2(),
sms.getParams3(),
sms.getParams4(),
sms.getStatus());
//sms.setCreateDate(new Date());
baseDao.insert(sms);
}
}

Loading…
Cancel
Save