Browse Source

新增模块,修改配置,

dev
yujintao 6 years ago
parent
commit
65f41f7c4a
  1. 11
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java
  2. 3
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java
  3. 2
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java
  4. 3
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java
  5. 27
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java
  6. 1
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/ResourceServiceImpl.java
  7. 4
      esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/enums/EpdcDelFlagEnum.java
  8. 98
      esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/handler/FieldMetaObjectHandler.java
  9. 25
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/annotation/LoginUser.java
  10. 16
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/constant/Constant.java
  11. 33
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/constant/FieldConstant.java
  12. 4
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/constant/ServiceConstant.java
  13. 63
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/CpUserDetailRedis.java
  14. 4
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java
  15. 52
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/resolver/LoginUserHandlerMethodArgumentResolver.java
  16. 42
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/security/user/CpUserDetail.java
  17. 4
      esua-epdc/epdc-gateway/pom.xml
  18. 23
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java
  19. 8
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java
  20. 2
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/AuthFilter.java
  21. 122
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java
  22. 22
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpProperty.java
  23. 27
      esua-epdc/epdc-gateway/src/main/resources/application.yml
  24. 48
      esua-epdc/epdc-module/epdc-app/epdc-app-client/pom.xml
  25. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-client/src/main/java/com/elink/esua/epdc/epdc.gitkeep
  26. 143
      esua-epdc/epdc-module/epdc-app/epdc-app-server/pom.xml
  27. 31
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/java/com/elink/esua/epdc/AppApplication.java
  28. 26
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/java/com/elink/esua/epdc/config/ModuleConfigImpl.java
  29. 34
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java
  30. 65
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/application.yml
  31. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages.properties
  32. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages_en_US.properties
  33. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages_zh_CN.properties
  34. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages_zh_TW.properties
  35. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation.properties
  36. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation_en_US.properties
  37. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation_zh_CN.properties
  38. 0
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation_zh_TW.properties
  39. 159
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/logback-spring.xml
  40. 14
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/mapper/ScheduleJobDao.xml
  41. 7
      esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/mapper/ScheduleJobLogDao.xml
  42. 20
      esua-epdc/epdc-module/epdc-app/pom.xml
  43. 2
      esua-epdc/epdc-module/epdc-services/epdc-services-server/pom.xml
  44. 1
      esua-epdc/epdc-module/pom.xml

11
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java

@ -10,6 +10,7 @@ package com.elink.esua.epdc.controller;
import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.exception.ErrorCode;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.validator.AssertUtils;
@ -108,4 +109,14 @@ public class AuthController {
return new Result<UserDetail>().ok(data);
}
@GetMapping(value = "getLoginUserInfo")
public Result<CpUserDetail> getLoginUserInfo(String token) {
CpUserDetail cpUserDetail = authService.getLoginUserInfo(token);
if (cpUserDetail != null) {
return new Result<CpUserDetail>().ok(cpUserDetail);
}
return new Result<CpUserDetail>().error();
}
}

3
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java

@ -10,8 +10,6 @@ package com.elink.esua.epdc.feign.fallback;
import com.elink.esua.epdc.feign.ResourceFeignClient;
import com.elink.esua.epdc.commons.tools.security.bo.ResourceBO;
import com.elink.esua.epdc.feign.ResourceFeignClient;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@ -22,7 +20,6 @@ import java.util.List;
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component
public class ResourceFeignClientFallback implements ResourceFeignClient {
@Override

2
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java

@ -11,7 +11,6 @@ package com.elink.esua.epdc.feign.fallback;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.feign.UserFeignClient;
import org.springframework.stereotype.Component;
/**
* 用户接口 Fallback
@ -19,7 +18,6 @@ import org.springframework.stereotype.Component;
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override

3
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java

@ -8,6 +8,7 @@
package com.elink.esua.epdc.service;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import com.elink.esua.epdc.dto.AuthorizationDTO;
import com.elink.esua.epdc.dto.LoginDTO;
@ -28,4 +29,6 @@ public interface AuthService {
* 退出
*/
void logout(Long userId);
CpUserDetail getLoginUserInfo(String token);
}

27
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java

@ -8,6 +8,8 @@
package com.elink.esua.epdc.service.impl;
import com.elink.esua.epdc.commons.tools.redis.CpUserDetailRedis;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import com.elink.esua.epdc.enums.UserStatusEnum;
import com.elink.esua.epdc.commons.tools.exception.ErrorCode;
import com.elink.esua.epdc.commons.tools.exception.RenException;
@ -25,11 +27,11 @@ import com.elink.esua.epdc.commons.tools.utils.IpUtils;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.AuthorizationDTO;
import com.elink.esua.epdc.dto.LoginDTO;
import com.elink.esua.epdc.enums.UserStatusEnum;
import com.elink.esua.epdc.feign.UserFeignClient;
import com.elink.esua.epdc.jwt.JwtProperties;
import com.elink.esua.epdc.jwt.JwtUtils;
import com.elink.esua.epdc.service.AuthService;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
@ -50,6 +52,8 @@ public class AuthServiceImpl implements AuthService {
@Autowired
private UserDetailRedis userDetailRedis;
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Autowired
private LogProducer logProducer;
@Autowired
private JwtUtils jwtUtils;
@ -144,4 +148,25 @@ public class AuthServiceImpl implements AuthService {
userDetailRedis.logout(userId);
}
@Override
public CpUserDetail getLoginUserInfo(String token) {
//是否过期
Claims claims = jwtUtils.getClaimByToken(token);
if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) {
throw new RenException(ErrorCode.UNAUTHORIZED);
}
//获取用户ID
String userId = claims.getSubject();
//查询Redis,如果没数据,则保持用户信息到Redis
CpUserDetail cpUserDetail = cpUserDetailRedis.get(userId);
if (cpUserDetail != null) {
//过期时间
long expire = (claims.getExpiration().getTime() - System.currentTimeMillis()) / 1000;
cpUserDetailRedis.set(cpUserDetail, expire);
return cpUserDetail;
}
return null;
}
}

1
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/ResourceServiceImpl.java

@ -20,7 +20,6 @@ import com.elink.esua.epdc.commons.tools.security.enums.ResourceAuthEnum;
import com.elink.esua.epdc.commons.tools.security.enums.UserKillEnum;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.feign.ResourceFeignClient;
import com.elink.esua.epdc.feign.UserFeignClient;
import com.elink.esua.epdc.jwt.JwtUtils;
import com.elink.esua.epdc.service.ResourceService;

4
esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/enums/ELinkDelFlagEnum.java → esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/enums/EpdcDelFlagEnum.java

@ -14,7 +14,7 @@ package com.elink.esua.epdc.commons.mybatis.enums;
* @author yujintao
* @date 2019/8/19 10:37
*/
public enum ELinkDelFlagEnum {
public enum EpdcDelFlagEnum {
/**
* 未删
*/
@ -26,7 +26,7 @@ public enum ELinkDelFlagEnum {
private String value;
ELinkDelFlagEnum(String value) {
EpdcDelFlagEnum(String value) {
this.value = value;
}

98
esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/handler/FieldMetaObjectHandler.java

@ -1,15 +1,22 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc.commons.mybatis.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.elink.esua.epdc.commons.mybatis.entity.BaseEntity;
import com.elink.esua.epdc.commons.mybatis.entity.BaseEpdcEntity;
import com.elink.esua.epdc.commons.mybatis.enums.DelFlagEnum;
import com.elink.esua.epdc.commons.mybatis.enums.EpdcDelFlagEnum;
import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.constant.FieldConstant;
import com.elink.esua.epdc.commons.tools.constant.NumConstant;
import com.elink.esua.epdc.commons.tools.security.user.SecurityUser;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import org.apache.ibatis.reflection.MetaObject;
@ -29,39 +36,80 @@ public class FieldMetaObjectHandler implements MetaObjectHandler {
private final static String CREATOR = "creator";
private final static String UPDATE_DATE = "updateDate";
private final static String UPDATER = "updater";
private final static String DEL_FLAG = "delFlag";
private final static String DEPT_ID = "deptId";
@Override
public void insertFill(MetaObject metaObject) {
UserDetail user = SecurityUser.getUser();
if(user == null){
return;
}
Date date = new Date();
if (metaObject.getOriginalObject() instanceof BaseEpdcEntity) {
String userId = user == null ? Constant.APP_USER_FLAG : String.valueOf(user.getId());
Long deptId = user == null ? null : user.getDeptId();
setFieldValByName(FieldConstant.CREATED_TIME_HUMP, date, metaObject);
setFieldValByName(FieldConstant.CREATED_BY_HUMP, userId, metaObject);
setFieldValByName(FieldConstant.UPDATED_TIME_HUMP, date, metaObject);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, userId, metaObject);
setFieldValByName(FieldConstant.REVISION_HUMP, NumConstant.ZERO, metaObject);
//删除标识
setFieldValByName(FieldConstant.DEL_FLAG_HUMP, EpdcDelFlagEnum.NORMAL.value(), metaObject);
// 数据权限标志
setFieldValByName(DEPT_ID, deptId, metaObject);
//创建者
setFieldValByName(CREATOR, user.getId(), metaObject);
//创建时间
setFieldValByName(CREATE_DATE, date, metaObject);
//创建者所属部门
setFieldValByName(DEPT_ID, user.getDeptId(), metaObject);
//更新者
setFieldValByName(UPDATER, user.getId(), metaObject);
//更新时间
setFieldValByName(UPDATE_DATE, date, metaObject);
//删除标识
setFieldValByName(DEL_FLAG, DelFlagEnum.NORMAL.value(), metaObject);
} else {
if (user == null) {
return;
}
//创建者
setFieldValByName(CREATOR, user.getId(), metaObject);
//创建时间
setFieldValByName(CREATE_DATE, date, metaObject);
//创建者所属部门
if (metaObject.hasGetter(DEPT_ID)) {
if (null == metaObject.getValue(DEPT_ID)) {
setFieldValByName(DEPT_ID, user.getDeptId(), metaObject);
}
}
//更新者
setFieldValByName(UPDATER, user.getId(), metaObject);
//更新时间
setFieldValByName(UPDATE_DATE, date, metaObject);
//删除标识
setFieldValByName(FieldConstant.DEL_FLAG_HUMP, DelFlagEnum.NORMAL.value(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
//更新者
setFieldValByName(UPDATER, SecurityUser.getUserId(), metaObject);
//更新时间
setFieldValByName(UPDATE_DATE, new Date(), metaObject);
Object originalObject = metaObject.getOriginalObject();
Long id = SecurityUser.getUserId();
boolean fillEntity = false;
boolean fillEsuaEntity = false;
if (originalObject instanceof BaseEntity) {
fillEntity = true;
} else if (originalObject instanceof BaseEpdcEntity) {
fillEsuaEntity = true;
} else {
if (metaObject.hasGetter(Constants.ENTITY)) {
Object et = metaObject.getValue(Constants.ENTITY);
if (et instanceof BaseEpdcEntity) {
fillEsuaEntity = true;
} else if (et instanceof BaseEntity) {
fillEntity = true;
}
}
}
if (fillEntity) {
id = null == id ? 0L : id;
//更新者
setFieldValByName(UPDATER, id, metaObject);
//更新时间
setFieldValByName(UPDATE_DATE, new Date(), metaObject);
} else if (fillEsuaEntity) {
String userId = null == id ? Constant.APP_USER_FLAG : String.valueOf(id);
setFieldValByName(FieldConstant.UPDATED_BY_HUMP, userId, metaObject);
setFieldValByName(FieldConstant.UPDATED_TIME_HUMP, new Date(), metaObject);
}
}
}

25
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/annotation/LoginUser.java

@ -0,0 +1,25 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.elink.esua.epdc.commons.tools.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 登录用户信息
*
* @author Mark sunlightcs@gmail.com
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
}

16
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/constant/Constant.java

@ -1,8 +1,8 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
@ -84,4 +84,16 @@ public interface Constant {
* token header
*/
String TOKEN_HEADER = "token";
/**
* authorization header
*/
String AUTHORIZATION_HEADER = "authorization";
/**
* APP用户标识
*/
String APP_USER_KEY = "appUserId";
/**
* 移动端用户标识
*/
String APP_USER_FLAG = "APP_USER";
}

33
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/constant/FieldConstant.java

@ -0,0 +1,33 @@
package com.elink.esua.epdc.commons.tools.constant;
/**
* 常用字段常量
*
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/8/20 10:11
*/
public interface FieldConstant {
String ID = "ID";
String ID_HUMP = "id";
String REVISION = "REVISION";
String REVISION_HUMP = "revision";
String CREATED_BY = "CREATED_BY";
String CREATED_BY_HUMP = "createdBy";
String CREATED_TIME = "CREATED_TIME";
String CREATED_TIME_HUMP = "createdTime";
String UPDATED_BY = "UPDATED_BY";
String UPDATED_BY_HUMP = "updatedBy";
String UPDATED_TIME = "UPDATED_TIME";
String UPDATED_TIME_HUMP = "updatedTime";
String DEL_FLAG = "DEL_FLAG";
String DEL_FLAG_HUMP = "delFlag";
}

4
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/constant/ServiceConstant.java

@ -59,4 +59,8 @@ public interface ServiceConstant {
* 生活服务模块
*/
String EPDC_SERVICES_SERVER = "epdc-services-server";
/**
* 移动端接口模块
*/
String EPDC_APP_SERVER = "epdc-app-server";
}

63
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/CpUserDetailRedis.java

@ -0,0 +1,63 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc.commons.tools.redis;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* CP用户Redis
*
* @author rongchao
* @since 1.0.0
*/
@Component
public class CpUserDetailRedis {
@Autowired
private RedisUtils redisUtils;
public void set(CpUserDetail user, long expire) {
if (user == null) {
return;
}
String key = RedisKeys.getCpUserKey(user.getId());
//bean to map
Map<String, Object> map = BeanUtil.beanToMap(user, false, true);
redisUtils.hMSet(key, map, expire);
}
public CpUserDetail get(String id) {
String key = RedisKeys.getCpUserKey(id);
Map<String, Object> map = redisUtils.hGetAll(key);
if (MapUtil.isEmpty(map)) {
return null;
}
//map to bean
CpUserDetail user = BeanUtil.mapToBean(map, CpUserDetail.class, true);
return user;
}
/**
* 用户退出
*
* @param id
*/
public void logout(String id) {
redisUtils.delete(RedisKeys.getCpUserKey(id));
}
}

4
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/redis/RedisKeys.java

@ -71,4 +71,8 @@ public class RedisKeys {
public static String getUserPermissionsKey(Long userId) {
return MODULE_FLAG + "sys:user:permissions:" + userId;
}
public static String getCpUserKey(String id) {
return MODULE_FLAG + "sys:security:cpuser:" + id;
}
}

52
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/resolver/LoginUserHandlerMethodArgumentResolver.java

@ -0,0 +1,52 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc.commons.tools.resolver;
import com.elink.esua.epdc.commons.tools.annotation.LoginUser;
import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.redis.CpUserDetailRedis;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* @LoginUser注解的方法参数注入当前登录用户
*
* @author Mark sunlightcs@gmail.com
*/
@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(CpUserDetail.class) && parameter.hasParameterAnnotation(LoginUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
//获取用户ID
String userId = request.getHeader(Constant.APP_USER_KEY);
if (StringUtils.isEmpty(userId)) {
return null;
}
CpUserDetail user = cpUserDetailRedis.get(userId);
return user;
}
}

42
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/security/user/CpUserDetail.java

@ -0,0 +1,42 @@
package com.elink.esua.epdc.commons.tools.security.user;
import lombok.Data;
import java.io.Serializable;
/**
* APP用户详情
*
* @author rongchao
* @Date 19-5-13
*/
@Data
public class CpUserDetail implements Serializable {
private static final long serialVersionUID = 6172109654041516399L;
/**
* 用户ID
*/
private String id;
/**
* 昵称
*/
private String nickname;
/**
* 真实姓名
*/
private String realName;
/**
* 手机号
*/
private String mobile;
/**
* 令牌
*/
private String token;
}

4
esua-epdc/epdc-gateway/pom.xml

@ -78,6 +78,8 @@
<!-- <gateway.routes.epdc-admin-server.uri>http://127.0.0.1:9092</gateway.routes.epdc-admin-server.uri>-->
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-api-server.uri>lb://epdc-api-server</gateway.routes.epdc-api-server.uri>
<gateway.routes.epdc-app-server.uri>lb://epdc-app-server</gateway.routes.epdc-app-server.uri>
<!-- <gateway.routes.epdc-app-server.uri>http://127.0.0.1:9058</gateway.routes.epdc-app-server.uri>-->
<gateway.routes.epdc-heart-server.uri>lb://epdc-heart-server</gateway.routes.epdc-heart-server.uri>
<!-- <gateway.routes.epdc-heart-server.uri>http://127.0.0.1:9060</gateway.routes.epdc-heart-server.uri>-->
<gateway.routes.epdc-job-server.uri>lb://epdc-job-server</gateway.routes.epdc-job-server.uri>
@ -113,6 +115,7 @@
<gateway.routes.epdc-admin-server.uri>lb://epdc-admin-server</gateway.routes.epdc-admin-server.uri>
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-api-server.uri>lb://epdc-api-server</gateway.routes.epdc-api-server.uri>
<gateway.routes.epdc-app-server.uri>lb://epdc-app-server</gateway.routes.epdc-app-server.uri>
<gateway.routes.epdc-heart-server.uri>lb://epdc-heart-server</gateway.routes.epdc-heart-server.uri>
<gateway.routes.epdc-job-server.uri>lb://epdc-job-server</gateway.routes.epdc-job-server.uri>
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server</gateway.routes.epdc-message-server.uri>
@ -142,6 +145,7 @@
<gateway.routes.epdc-admin-server.uri>lb://epdc-admin-server</gateway.routes.epdc-admin-server.uri>
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-api-server.uri>lb://epdc-api-server</gateway.routes.epdc-api-server.uri>
<gateway.routes.epdc-app-server.uri>lb://epdc-app-server</gateway.routes.epdc-app-server.uri>
<gateway.routes.epdc-heart-server.uri>lb://epdc-heart-server</gateway.routes.epdc-heart-server.uri>
<gateway.routes.epdc-job-server.uri>lb://epdc-job-server</gateway.routes.epdc-job-server.uri>
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server</gateway.routes.epdc-message-server.uri>

23
esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java

@ -1,19 +1,21 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc.feign;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import com.elink.esua.epdc.feign.fallback.ResourceFeignClientFallback;
import com.elink.esua.epdc.commons.tools.constant.ServiceConstant;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
@ -29,13 +31,24 @@ public interface ResourceFeignClient {
/**
* 是否有资源访问权限
* @param token token
* @param url 资源URL
* @param method 请求方式
*
* @param token token
* @param url 资源URL
* @param method 请求方式
* @return 有访问权限则返回用户信息
*/
@PostMapping("auth/resource")
Result<UserDetail> resource(@RequestHeader(HttpHeaders.ACCEPT_LANGUAGE) String language, @RequestParam("token") String token,
@RequestParam("url") String url, @RequestParam("method") String method);
/**
* 获取登录用户信息
*
* @param token
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.commons.tools.security.user.CpUserDetail>
* @author
* @date 2019/8/19 17:19
*/
@GetMapping("auth/getLoginUserInfo")
Result<CpUserDetail> getLoginUserInfo(@RequestParam("token") String token);
}

8
esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java

@ -8,10 +8,10 @@
package com.elink.esua.epdc.feign.fallback;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import com.elink.esua.epdc.commons.tools.security.user.UserDetail;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.feign.ResourceFeignClient;
import org.springframework.stereotype.Component;
/**
* 资源接口 Fallback
@ -19,11 +19,15 @@ import org.springframework.stereotype.Component;
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component
public class ResourceFeignClientFallback implements ResourceFeignClient {
@Override
public Result<UserDetail> resource(String language, String token, String url, String method) {
return new Result<UserDetail>().error();
}
@Override
public Result<CpUserDetail> getLoginUserInfo(String token) {
return new Result<CpUserDetail>().error();
}
}

2
esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/AuthFilter.java

@ -41,7 +41,9 @@ import java.util.List;
@Configuration
@ConfigurationProperties(prefix = "renren")
public class AuthFilter implements GlobalFilter {
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Autowired
private ResourceFeignClient resourceFeignClient;
/**

122
esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java

@ -0,0 +1,122 @@
package com.elink.esua.epdc.filter;
import com.alibaba.fastjson.JSON;
import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.feign.ResourceFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
/**
* app接口权限过滤器
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component("CpAuth")
public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CpAuthGatewayFilterFactory.CpAuthConfig> {
@Autowired
private ResourceFeignClient resourceFeignClient;
@Autowired
private CpProperty cpProperty;
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("enabled");
}
public CpAuthGatewayFilterFactory() {
super(CpAuthGatewayFilterFactory.CpAuthConfig.class);
}
@Override
public GatewayFilter apply(CpAuthConfig config) {
return (exchange, chain) -> {
if (!config.isEnabled()) {
return chain.filter(exchange);
}
ServerHttpRequest request = exchange.getRequest();
String requestUri = request.getPath().pathWithinApplication().value();
//请求放行,无需验证权限
if (!pathMatcher(requestUri)) {
return chain.filter(exchange);
}
HttpHeaders headers = request.getHeaders();
String token = headers.getFirst(Constant.AUTHORIZATION_HEADER);
if (token == null) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
}
Result<CpUserDetail> result = resourceFeignClient.getLoginUserInfo(token);
if (!result.success()) {
return response(exchange, result);
}
CpUserDetail user = result.getData();
//当前登录用户userId,添加到header中
if (user != null) {
ServerHttpRequest build = exchange.getRequest().mutate().header(Constant.APP_USER_KEY, user.getId()).build();
return chain.filter(exchange.mutate().request(build).build());
}
return chain.filter(exchange);
};
}
private Mono<Void> response(ServerWebExchange exchange, Object object) {
String json = JSON.toJSONString(object);
DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(json.getBytes(StandardCharsets.UTF_8));
exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
exchange.getResponse().setStatusCode(HttpStatus.OK);
return exchange.getResponse().writeWith(Flux.just(buffer));
}
private boolean pathMatcher(String requestUri) {
for (String url : cpProperty.getUrls()) {
if (antPathMatcher.match(url, requestUri)) {
return true;
}
}
return false;
}
public static class CpAuthConfig {
/**
* 控制是否开启认证
*/
private boolean enabled;
public CpAuthConfig() {
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
}

22
esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpProperty.java

@ -0,0 +1,22 @@
package com.elink.esua.epdc.filter;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author rongchao
* @Date 19-5-17
*/
@Data
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "epdc")
public class CpProperty {
private List<String> urls;
}

27
esua-epdc/epdc-gateway/src/main/resources/application.yml

@ -76,7 +76,7 @@ spring:
uri: @gateway.routes.epdc-heart-server.uri@
order: 8
predicates:
- Path=/api/**
- Path=/heart/**
filters:
- StripPrefix=0
#友邻社群模块
@ -84,7 +84,7 @@ spring:
uri: @gateway.routes.epdc-neighbor-server.uri@
order: 9
predicates:
- Path=/api/**
- Path=/neighbor/**
filters:
- StripPrefix=0
#新闻公告模块
@ -92,7 +92,7 @@ spring:
uri: @gateway.routes.epdc-news-server.uri@
order: 10
predicates:
- Path=/api/**
- Path=/news/**
filters:
- StripPrefix=0
#党群议事模块
@ -100,7 +100,7 @@ spring:
uri: @gateway.routes.epdc-party-server.uri@
order: 11
predicates:
- Path=/api/**
- Path=/party/**
filters:
- StripPrefix=0
#生活服务模块
@ -108,9 +108,18 @@ spring:
uri: @gateway.routes.epdc-services-server.uri@
order: 12
predicates:
- Path=/api/**
- Path=/services/**
filters:
- StripPrefix=0
#生活服务模块
- id: epdc-app-server
uri: @gateway.routes.epdc-app-server.uri@
order: 13
predicates:
- Path=/epdc-app/**
filters:
- StripPrefix=0
- CpAuth=true
nacos:
discovery:
server-addr: @nacos.server-addr@
@ -155,3 +164,11 @@ renren:
- /activiti/modeler.html
- /activiti/service/**
- /activiti/editor-app/**
epdc:
# 便捷通行接口
urls:
- /*/epdc-app/**

48
esua-epdc/epdc-module/epdc-app/epdc-app-client/pom.xml

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>epdc-app</artifactId>
<groupId>com.esua.epdc</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>epdc-app-client</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-commons-tools</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-heart-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-neighbor-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-news-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-party-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-services-client</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>

0
esua-epdc/epdc-module/epdc-app/epdc-app-client/src/main/java/com/elink/esua/epdc/epdc.gitkeep

143
esua-epdc/epdc-module/epdc-app/epdc-app-server/pom.xml

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>epdc-app</artifactId>
<groupId>com.esua.epdc</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>epdc-app-server</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-app-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-commons-tools</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-commons-mybatis</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring.boot.admin.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
<server.port>9058</server.port>
<spring.redis.host>47.104.224.45</spring.redis.host>
<spring.redis.port>6379</spring.redis.port>
<spring.redis.password>elink@888</spring.redis.password>
<spring.datasource.druid.url>
<![CDATA[jdbc:mysql://47.104.224.45:3308/esua_epdc_job?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false]]>
</spring.datasource.druid.url>
<spring.datasource.druid.username>epdc</spring.datasource.druid.username>
<spring.datasource.druid.password>elink888</spring.datasource.druid.password>
<nacos.register-enabled>false</nacos.register-enabled>
<nacos.server-addr>47.104.224.45:8848</nacos.server-addr>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
<server.port>9058</server.port>
<spring.redis.host>47.104.224.45</spring.redis.host>
<spring.redis.port>6379</spring.redis.port>
<spring.redis.password>elink@888</spring.redis.password>
<spring.datasource.druid.url>
<![CDATA[jdbc:mysql://47.104.224.45:3308/esua_epdc_job?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false]]>
</spring.datasource.druid.url>
<spring.datasource.druid.username>epdc</spring.datasource.druid.username>
<spring.datasource.druid.password>elink888</spring.datasource.druid.password>
<nacos.register-enabled>false</nacos.register-enabled>
<nacos.server-addr>47.104.224.45:8848</nacos.server-addr>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
<server.port>9058</server.port>
<spring.redis.host>47.104.224.45</spring.redis.host>
<spring.redis.port>6379</spring.redis.port>
<spring.redis.password>elink@888</spring.redis.password>
<spring.datasource.druid.url>
<![CDATA[jdbc:mysql://47.104.224.45:3308/esua_epdc_job?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false]]>
</spring.datasource.druid.url>
<spring.datasource.druid.username>epdc</spring.datasource.druid.username>
<spring.datasource.druid.password>elink888</spring.datasource.druid.password>
<nacos.register-enabled>false</nacos.register-enabled>
<nacos.server-addr>47.104.224.45:8848</nacos.server-addr>
</properties>
</profile>
</profiles>
</project>

31
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/java/com/elink/esua/epdc/AppApplication.java

@ -0,0 +1,31 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 移动端接口模块
*
* @author Mark sunlightcs@gmail.com
* @since 1.1.0
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args);
}
}

26
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/java/com/elink/esua/epdc/config/ModuleConfigImpl.java

@ -0,0 +1,26 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc.config;
import com.elink.esua.epdc.commons.tools.config.ModuleConfig;
import org.springframework.stereotype.Service;
/**
* 模块配置信息-移动端接口模块
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Service
public class ModuleConfigImpl implements ModuleConfig {
@Override
public String getName() {
return "app";
}
}

34
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java

@ -0,0 +1,34 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
package com.elink.esua.epdc.config;
import com.elink.esua.epdc.commons.tools.resolver.LoginUserHandlerMethodArgumentResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* MVC配置
*
* @author Mark sunlightcs@gmail.com
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
}
}

65
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/application.yml

@ -0,0 +1,65 @@
server:
port: @server.port@
servlet:
context-path: /epdc-app
spring:
application:
name: epdc-app-server
# 环境 dev|test|prod
profiles:
active: @spring.profiles.active@
messages:
encoding: UTF-8
basename: i18n/messages,i18n/messages_common
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
redis:
database: 0
host: @spring.redis.host@
timeout: 30s
port: @spring.redis.port@
password: @spring.redis.password@
cloud:
nacos:
discovery:
server-addr: @nacos.server-addr@
register-enabled: @nacos.register-enabled@
datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver
url: @spring.datasource.druid.url@
username: @spring.datasource.druid.username@
password: @spring.datasource.druid.password@
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: io.renren.entity;com.elink.esua.epdc.entity
global-config:
#数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: ID_WORKER
#字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
field-strategy: NOT_NULL
#驼峰下划线转换
column-underline: true
banner: false
#原生配置
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages_en_US.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages_zh_CN.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/messages_zh_TW.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation_en_US.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation_zh_CN.properties

0
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/i18n/validation_zh_TW.properties

159
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/logback-spring.xml

@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<property name="log.path" value="logs/epdc-app"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--2. 输出到文档-->
<!-- 2.1 level为 DEBUG 日志,时间滚动输出 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/debug.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 -->
<fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.2 level为 INFO 日志,时间滚动输出 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/info.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.3 level为 WARN 日志,时间滚动输出 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/warn.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.4 level为 ERROR 日志,时间滚动输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${log.path}/error.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 开发、测试环境 -->
<springProfile name="dev,test">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO"/>
<logger name="com.elink.esua.epdc" level="INFO"/>
<logger name="com.elink.esua.epdc.dao" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="org.springframework.web" level="ERROR"/>
<logger name="org.springboot.sample" level="ERROR"/>
<logger name="com.elink.esua.epdc" level="ERROR"/>
<root level="ERROR">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
</configuration>

14
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/mapper/ScheduleJobDao.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elink.esua.epdc.dao.ScheduleJobDao">
<!-- 批量更新状态 -->
<update id="updateBatch">
update schedule_job set status = #{status} where id in
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>

7
esua-epdc/epdc-module/epdc-app/epdc-app-server/src/main/resources/mapper/ScheduleJobLogDao.xml

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elink.esua.epdc.dao.ScheduleJobLogDao">
</mapper>

20
esua-epdc/epdc-module/epdc-app/pom.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>epdc-module</artifactId>
<groupId>com.esua.epdc</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>epdc-app</artifactId>
<packaging>pom</packaging>
<modules>
<module>epdc-app-client</module>
<module>epdc-app-server</module>
</modules>
</project>

2
esua-epdc/epdc-module/epdc-services/epdc-services-server/pom.xml

@ -15,7 +15,7 @@
<dependencies>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-news-client</artifactId>
<artifactId>epdc-services-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>

1
esua-epdc/epdc-module/pom.xml

@ -24,6 +24,7 @@
<module>epdc-party</module>
<module>epdc-neighbor</module>
<module>epdc-services</module>
<module>epdc-app</module>
</modules>
</project>

Loading…
Cancel
Save