From ace875171dd78142cf5cacd50728c630019018a3 Mon Sep 17 00:00:00 2001 From: wxz Date: Thu, 2 Apr 2020 16:53:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E5=8F=91=E9=80=81=E4=B8=8D=E8=83=BD=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/FieldMetaObjectHandler.java | 17 +++-- .../tools/security/user/LoginUserUtil.java | 33 ++++++++++ .../filter/CpAuthGatewayFilterFactory.java | 62 +++++++++---------- .../com/epmet/filter/FeignRequestFilter.java | 62 +++++++++++++++++++ .../com/epmet/filter/UserTokenFilter.java | 45 ++++++++++++++ .../java/com/epmet/entity/SysSmsEntity.java | 4 +- .../epmet/service/impl/SysSmsServiceImpl.java | 10 +-- 7 files changed, 186 insertions(+), 47 deletions(-) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java create mode 100644 epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java create mode 100644 epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java diff --git a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java index 18a16ed78d..051796e71c 100644 --- a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/handler/FieldMetaObjectHandler.java +++ b/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; } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/security/user/LoginUserUtil.java new file mode 100644 index 0000000000..2b249bee22 --- /dev/null +++ b/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; + } +} diff --git a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java b/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java index 85314a7ae1..7e85cfeb03 100644 --- a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java +++ b/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 { +public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory implements UserTokenFilter { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private CpProperty cpProperty; @@ -90,7 +90,7 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory response(ServerWebExchange exchange, Object object) { String json = JSON.toJSONString(object); diff --git a/epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java b/epmet-gateway/src/main/java/com/epmet/filter/FeignRequestFilter.java new file mode 100644 index 0000000000..dcf8f40909 --- /dev/null +++ b/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 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); + } +} diff --git a/epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java b/epmet-gateway/src/main/java/com/epmet/filter/UserTokenFilter.java new file mode 100644 index 0000000000..d026d16783 --- /dev/null +++ b/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; + } + +} diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/SysSmsEntity.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/SysSmsEntity.java index e0e4009479..a7ea2368a2 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/SysSmsEntity.java +++ b/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; /** diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java index 0131b235c0..6b9c9314d9 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java +++ b/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 } 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); } }