diff --git a/basic-app/pom.xml b/basic-app/pom.xml index b895e779..402484da 100644 --- a/basic-app/pom.xml +++ b/basic-app/pom.xml @@ -12,11 +12,6 @@ basic-app - - ink.wgink - basic-exception - 1.0-SNAPSHOT - ink.wgink basic-interface diff --git a/basic-app/src/main/java/ink/wgink/app/AppTokenManager.java b/basic-app/src/main/java/ink/wgink/app/AppTokenManager.java index 5354d538..3ff43141 100644 --- a/basic-app/src/main/java/ink/wgink/app/AppTokenManager.java +++ b/basic-app/src/main/java/ink/wgink/app/AppTokenManager.java @@ -1,11 +1,11 @@ package ink.wgink.app; import com.alibaba.fastjson.JSONObject; -import ink.wgink.app.entity.AppToken; -import ink.wgink.app.entity.AppTokenUser; -import ink.wgink.app.enums.AppTokenTypeEnum; +import ink.wgink.pojo.app.AppToken; +import ink.wgink.pojo.app.AppTokenUser; import ink.wgink.exceptions.TokenException; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.interfaces.manager.IAppManager; import ink.wgink.util.AesUtil; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; @@ -29,7 +29,8 @@ import java.util.concurrent.ConcurrentHashMap; * @Date: 2019-08-02 11:08 * @Version: 1.0 **/ -public class AppTokenManager { +public class AppTokenManager implements IAppManager { + private static final Logger LOG = LoggerFactory.getLogger(AppTokenManager.class); private static AppTokenManager appTokenManager = AppTokenManagerBuilder.appTokenManager; private static final Map tokens = new ConcurrentHashMap(); @@ -47,6 +48,7 @@ public class AppTokenManager { * @param token * @return */ + @Override public AppToken getToken(String token) { AppToken appToken = tokens.get(token); if (appToken != null) { @@ -62,7 +64,7 @@ public class AppTokenManager { * @param appTokenTypeEnum * @param appTokenUser */ - public synchronized void addToken(String token, AppTokenTypeEnum appTokenTypeEnum, AppTokenUser appTokenUser) { + public synchronized void addToken(String token, AppToken.AppTokenTypeEnum appTokenTypeEnum, AppTokenUser appTokenUser) { AppToken appToken = new AppToken(); appToken.setToken(token); appToken.setAppTokenTypeEnum(appTokenTypeEnum); @@ -78,6 +80,7 @@ public class AppTokenManager { tokens.put(token, appToken); } + @Override public AppTokenUser parseToAppTokenUser(String token) throws TokenException { String userInfo = null; try { @@ -119,6 +122,7 @@ public class AppTokenManager { * * @return */ + @Override public List listCurrentUsers() { List users = new ArrayList<>(); for (Map.Entry kvs : tokens.entrySet()) { diff --git a/basic-app/src/main/java/ink/wgink/app/enums/AppTokenTypeEnum.java b/basic-app/src/main/java/ink/wgink/app/enums/AppTokenTypeEnum.java deleted file mode 100644 index 2e63d88a..00000000 --- a/basic-app/src/main/java/ink/wgink/app/enums/AppTokenTypeEnum.java +++ /dev/null @@ -1,27 +0,0 @@ -package ink.wgink.app.enums; - -/** - * When you feel like quitting. Think about why you started - * 当你想要放弃的时候,想想当初你为何开始 - * - * @ClassName: AppTokenTypeEnum - * @Description: appToken类别 - * @Author: WangGeng - * @Date: 2020/3/8 10:09 上午 - * @Version: 1.0 - **/ -public enum AppTokenTypeEnum { - - WECHAT("wechat"), - WECHAT_MINI_APP("wxminiapp"), - APP("app"); - private String type; - - AppTokenTypeEnum(String type) { - this.type = type; - } - - public String getType() { - return type == null ? "" : type.trim(); - } -} diff --git a/basic-app/src/main/java/ink/wgink/app/filter/AppTokenFilter.java b/basic-app/src/main/java/ink/wgink/app/filter/AppTokenFilter.java new file mode 100644 index 00000000..0848921f --- /dev/null +++ b/basic-app/src/main/java/ink/wgink/app/filter/AppTokenFilter.java @@ -0,0 +1,155 @@ +package ink.wgink.app.filter; + +import com.alibaba.fastjson.JSON; +import ink.wgink.app.AppTokenManager; +import ink.wgink.exceptions.TokenException; +import ink.wgink.pojo.app.AppToken; +import ink.wgink.pojo.app.AppTokenUser; +import ink.wgink.pojo.result.ErrorResult; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.filter.GenericFilterBean; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: AppTokenFilter + * @Description: App过滤器 + * @Author: wanggeng + * @Date: 2021/3/1 4:43 下午 + * @Version: 1.0 + */ +@Component +public class AppTokenFilter extends GenericFilterBean implements InitializingBean { + + private static final Logger LOG = LoggerFactory.getLogger(AppTokenFilter.class); + private AntPathMatcher antPathMatcher = new AntPathMatcher(); + /** + * APP登录(用户名密码) + */ + private static final String URL_LOGIN_DEFAULT = "/**/app/sign/login"; + /** + * APP登录(手机验证码) + */ + private static final String URL_LOGIN_PHONE = "/**/app/sign/loginphone"; + /** + * APP注册 + */ + private static final String URL_REGISTER = "/**/app/register/saveregisteruser"; + /** + * APP注册简单 + */ + private static final String URL_REGISTER_SIMPLE = "/**/app/register/saveregisterusersimple"; + /** + * APP忘记密码 + */ + private static final String URL_FORGET_PASSWORD = "/**/app/user/forgetpassword"; + /** + * 下载头像 + */ + private static final String URL_DOWNLOAD_AVATAR = "/**/app/user/downloadavatar/**"; + /** + * APP下载 + */ + private static final String URL_DOWNLOAD_APP = "/**/app/appversion/downloadapp/**"; + /** + * APP版本号 + */ + private static final String URL_APP_VERSION_NUM = "/**/app/appversion/getappversionnumber/**"; + /** + * APP放行 + */ + private static final String URL_RELEASE_APP = "/**/app/**/**release/**"; + /** + * APP路由放行 + */ + private static final String URL_RELEASE_APP_ROUTE = "/**/approute/**/**release/**"; + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + String requestUri = request.getRequestURI(); + // 非app 放行 + boolean appMatcher = antPathMatcher.match("/**/app*/**", requestUri); + if (!appMatcher) { + filterChain.doFilter(request, response); + return; + } + boolean matcher = antPathMatcher.match(URL_LOGIN_DEFAULT, requestUri) + || antPathMatcher.match(URL_LOGIN_PHONE, requestUri) + || antPathMatcher.match(URL_REGISTER, requestUri) + || antPathMatcher.match(URL_REGISTER_SIMPLE, requestUri) + || antPathMatcher.match(URL_FORGET_PASSWORD, requestUri) + || antPathMatcher.match(URL_DOWNLOAD_AVATAR, requestUri) + || antPathMatcher.match(URL_DOWNLOAD_APP, requestUri) + || antPathMatcher.match(URL_APP_VERSION_NUM, requestUri) + || antPathMatcher.match(URL_RELEASE_APP, requestUri) + || antPathMatcher.match(URL_RELEASE_APP_ROUTE, requestUri); + if (matcher) { + filterChain.doFilter(request, response); + return; + } + String token = request.getHeader("token"); + if (StringUtils.isBlank(token)) { + errorResponse(response, "token不能为空"); + return; + } + LOG.debug("校验token"); + try { + checkToken(token); + } catch (TokenException e) { + errorResponse(response, e.getMessage()); + return; + } + filterChain.doFilter(request, response); + } + + /** + * 校验token + * + * @param token + * @return + * @throws TokenException + */ + private void checkToken(String token) throws TokenException { + AppTokenManager appTokenManager = AppTokenManager.getInstance(); + LOG.debug("检查token是否存在"); + AppToken appToken = appTokenManager.getToken(token); + if (appToken != null) { + return; + } + LOG.debug("解析token是否合法"); + AppTokenUser appTokenUser = appTokenManager.parseToAppTokenUser(token); + appTokenManager.addToken(token, AppToken.AppTokenTypeEnum.APP, appTokenUser); + } + + /** + * 错误返回 + * + * @param response + * @param errorInfo + * @throws IOException + */ + private void errorResponse(HttpServletResponse response, String errorInfo) throws IOException { + response.setStatus(HttpStatus.BAD_REQUEST.value()); + response.setHeader("Content-Type", "application/json;charset=UTF-8"); + ErrorResult result = new ErrorResult(ErrorResult.ErrorResultCodeEnum.PARAMS_ERROR.getValue(), errorInfo); + response.getWriter().write(JSON.toJSONString(result)); + } + +} diff --git a/basic-exception/src/main/java/ink/wgink/exceptions/AppTokenException.java b/basic-exception/src/main/java/ink/wgink/exceptions/AppTokenException.java new file mode 100644 index 00000000..48c0b0b4 --- /dev/null +++ b/basic-exception/src/main/java/ink/wgink/exceptions/AppTokenException.java @@ -0,0 +1,35 @@ +package ink.wgink.exceptions; + +import ink.wgink.exceptions.base.SystemException; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: AppTokenException + * @Description: AppToken异常 + * @Author: wanggeng + * @Date: 2021/3/1 5:43 下午 + * @Version: 1.0 + */ +public class AppTokenException extends SystemException { + + public AppTokenException() { + } + + public AppTokenException(String message) { + super(message); + } + + public AppTokenException(String message, boolean withMsg) { + super(message, withMsg); + } + + public AppTokenException(String message, Throwable cause) { + super(message, cause); + } + + public AppTokenException(Throwable cause) { + super(cause); + } +} diff --git a/basic-interface/pom.xml b/basic-interface/pom.xml index f90abb08..a7703e4d 100644 --- a/basic-interface/pom.xml +++ b/basic-interface/pom.xml @@ -12,6 +12,11 @@ basic-interface + + ink.wgink + basic-exception + 1.0-SNAPSHOT + ink.wgink basic-pojo diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/manager/IAppManager.java b/basic-interface/src/main/java/ink/wgink/interfaces/manager/IAppManager.java new file mode 100644 index 00000000..7d8a538a --- /dev/null +++ b/basic-interface/src/main/java/ink/wgink/interfaces/manager/IAppManager.java @@ -0,0 +1,44 @@ +package ink.wgink.interfaces.manager; + +import ink.wgink.exceptions.TokenException; +import ink.wgink.pojo.app.AppToken; +import ink.wgink.pojo.app.AppTokenUser; + +import java.util.List; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: IAppManager + * @Description: app管理 + * @Author: wanggeng + * @Date: 2021/3/1 4:33 下午 + * @Version: 1.0 + */ +public interface IAppManager { + + /** + * 获取AppToken对象 + * + * @param token token 字符串 + * @return + */ + AppToken getToken(String token); + + /** + * 解析 token 串为 AppTokenUser 对象 + * + * @param token token 字符串 + * @return + * @throws TokenException + */ + AppTokenUser parseToAppTokenUser(String token) throws TokenException; + + /** + * 当前用户列表 + * + * @return + */ + List listCurrentUsers(); +} diff --git a/basic-app/src/main/java/ink/wgink/app/entity/AppToken.java b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppToken.java similarity index 84% rename from basic-app/src/main/java/ink/wgink/app/entity/AppToken.java rename to basic-pojo/src/main/java/ink/wgink/pojo/app/AppToken.java index cb9e50b8..60978204 100644 --- a/basic-app/src/main/java/ink/wgink/app/entity/AppToken.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppToken.java @@ -1,7 +1,4 @@ -package ink.wgink.app.entity; - - -import ink.wgink.app.enums.AppTokenTypeEnum; +package ink.wgink.pojo.app; /** * When you feel like quitting. Think about why you started @@ -77,4 +74,20 @@ public class AppToken { sb.append('}'); return sb.toString(); } + + public enum AppTokenTypeEnum { + + WECHAT("wechat"), + WECHAT_MINI_APP("wxminiapp"), + APP("app"); + private String type; + + AppTokenTypeEnum(String type) { + this.type = type; + } + + public String getType() { + return type == null ? "" : type.trim(); + } + } } diff --git a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUser.java b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUser.java similarity index 99% rename from basic-app/src/main/java/ink/wgink/app/entity/AppTokenUser.java rename to basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUser.java index 89c77661..9967e16c 100644 --- a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUser.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUser.java @@ -1,4 +1,4 @@ -package ink.wgink.app.entity; +package ink.wgink.pojo.app; import java.util.List; diff --git a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserDepartment.java b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserDepartment.java similarity index 97% rename from basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserDepartment.java rename to basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserDepartment.java index b3f94237..e1e98fec 100644 --- a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserDepartment.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserDepartment.java @@ -1,4 +1,4 @@ -package ink.wgink.app.entity; +package ink.wgink.pojo.app; /** * When you feel like quitting. Think about why you started @@ -11,6 +11,7 @@ package ink.wgink.app.entity; * @Version: 1.0 **/ public class AppTokenUserDepartment { + private String departmentId; private String departmentName; diff --git a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserGroup.java b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserGroup.java similarity index 97% rename from basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserGroup.java rename to basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserGroup.java index fa24e78d..8645acb0 100644 --- a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserGroup.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserGroup.java @@ -1,4 +1,4 @@ -package ink.wgink.app.entity; +package ink.wgink.pojo.app; /** * When you feel like quitting. Think about why you started diff --git a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserPosition.java b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserPosition.java similarity index 97% rename from basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserPosition.java rename to basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserPosition.java index 78ea249a..b07e0ad8 100644 --- a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserPosition.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserPosition.java @@ -1,4 +1,4 @@ -package ink.wgink.app.entity; +package ink.wgink.pojo.app; /** * When you feel like quitting. Think about why you started diff --git a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserRole.java b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserRole.java similarity index 97% rename from basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserRole.java rename to basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserRole.java index 55c2c942..06e2cdfd 100644 --- a/basic-app/src/main/java/ink/wgink/app/entity/AppTokenUserRole.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/app/AppTokenUserRole.java @@ -1,4 +1,4 @@ -package ink.wgink.app.entity; +package ink.wgink.pojo.app; /** * When you feel like quitting. Think about why you started diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/result/ErrorResult.java b/basic-pojo/src/main/java/ink/wgink/pojo/result/ErrorResult.java index dc5b38c9..939b5868 100644 --- a/basic-pojo/src/main/java/ink/wgink/pojo/result/ErrorResult.java +++ b/basic-pojo/src/main/java/ink/wgink/pojo/result/ErrorResult.java @@ -59,4 +59,40 @@ public class ErrorResult implements Serializable { sb.append('}'); return sb.toString(); } + + public enum ErrorResultCodeEnum { + + /** + * 错误类型 + */ + SYSTEM_ERROR(40001), + ENCODE_ERROR(40002), + DECODE_ERROR(40003), + APP_DEPENDENCY_ERROR(40004), + TEXT_ILLEGAL(40101), + PARAMS_ERROR(40102), + QUERY_ERROR(40101), + SAVE_ERROR(40102), + UPDATE_ERROR(40103), + REMOVE_ERROR(40104), + FILE_ERROR(40401), + TEST_ERROR(40201), + LOGIN_OUT(40301), + TOKEN_ERROR(40302), + USERNAME_PASSWORD_ERROR(40303), + USER_EXIST(40304), + PERMISSION_ERROR(40401), + DEVICE_ERROR(40501), + DEVICE_VERSION_ERROR(40502); + + private int value; + + ErrorResultCodeEnum(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } } diff --git a/basic-util/pom.xml b/basic-util/pom.xml index c4e4a7d0..d536ab78 100644 --- a/basic-util/pom.xml +++ b/basic-util/pom.xml @@ -12,12 +12,6 @@ basic-util - - ink.wgink - basic-pojo - 1.0-SNAPSHOT - - org.springframework @@ -134,6 +128,13 @@ + + + ink.wgink + basic-pojo + 1.0-SNAPSHOT + + \ No newline at end of file diff --git a/common/src/main/java/ink/wgink/common/advice/ResponseAdvice.java b/common/src/main/java/ink/wgink/common/advice/ResponseAdvice.java index ab4bbc0b..afef5937 100644 --- a/common/src/main/java/ink/wgink/common/advice/ResponseAdvice.java +++ b/common/src/main/java/ink/wgink/common/advice/ResponseAdvice.java @@ -1,7 +1,6 @@ package ink.wgink.common.advice; import com.alibaba.fastjson.JSON; -import ink.wgink.common.enums.ErrorResultCodeEnum; import ink.wgink.exceptions.*; import ink.wgink.exceptions.base.SystemException; import ink.wgink.interfaces.consts.ISystemConstant; @@ -9,8 +8,6 @@ import ink.wgink.pojo.result.ErrorResult; import ink.wgink.util.AesUtil; import ink.wgink.util.ReflectUtil; import ink.wgink.util.map.HashMapUtil; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -24,14 +21,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.sql.SQLSyntaxErrorException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.regex.Pattern; /** @@ -59,23 +49,25 @@ public class ResponseAdvice { } else { LOG.error(e.getMessage(), e); } - ErrorResult result = new ErrorResult(ErrorResultCodeEnum.SYSTEM_ERROR.getValue(), "系统错误"); + ErrorResult result = new ErrorResult(ErrorResult.ErrorResultCodeEnum.SYSTEM_ERROR.getValue(), "系统错误"); if (e instanceof SaveException) { - result.setCode(ErrorResultCodeEnum.SAVE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.SAVE_ERROR.getValue()); } else if (e instanceof RemoveException) { - result.setCode(ErrorResultCodeEnum.REMOVE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.REMOVE_ERROR.getValue()); } else if (e instanceof UpdateException) { - result.setCode(ErrorResultCodeEnum.UPDATE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.UPDATE_ERROR.getValue()); } else if (e instanceof SearchException) { - result.setCode(ErrorResultCodeEnum.QUERY_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.QUERY_ERROR.getValue()); } else if (e instanceof ParamsException) { - result.setCode(ErrorResultCodeEnum.PARAMS_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.PARAMS_ERROR.getValue()); } else if (e instanceof FileException) { - result.setCode(ErrorResultCodeEnum.FILE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.FILE_ERROR.getValue()); + } else if (e instanceof AppTokenException) { + result.setCode(ErrorResult.ErrorResultCodeEnum.APP_DEPENDENCY_ERROR.getValue()); } else if (e instanceof AppDeviceException) { - result.setCode(ErrorResultCodeEnum.DEVICE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.DEVICE_ERROR.getValue()); } else if (e instanceof AppVersionException) { - result.setCode(ErrorResultCodeEnum.DEVICE_VERSION_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.DEVICE_VERSION_ERROR.getValue()); } else if (e instanceof AccessTokenException) { response.setStatus(HttpStatus.UNAUTHORIZED.value()); } @@ -83,16 +75,16 @@ public class ResponseAdvice { if (e instanceof SystemException) { result.setMsg(e.getMessage()); } else if (e instanceof UnsupportedEncodingException) { - result.setCode(ErrorResultCodeEnum.ENCODE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.ENCODE_ERROR.getValue()); result.setMsg(e.getMessage()); } else if (e instanceof AesUtil.AesEncodeException) { - result.setCode(ErrorResultCodeEnum.ENCODE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.ENCODE_ERROR.getValue()); result.setMsg(e.getMessage()); } else if (e instanceof AesUtil.AesDecodeException) { - result.setCode(ErrorResultCodeEnum.DECODE_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.DECODE_ERROR.getValue()); result.setMsg(e.getMessage()); } else if (e instanceof ReflectUtil.ReflectException) { - result.setCode(ErrorResultCodeEnum.SYSTEM_ERROR.getValue()); + result.setCode(ErrorResult.ErrorResultCodeEnum.SYSTEM_ERROR.getValue()); } else { StringBuilder errorMessageSB = new StringBuilder(); for (StackTraceElement stackTraceElement : e.getStackTrace()) { diff --git a/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java b/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java index 7623d9b3..ac26f88f 100644 --- a/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java +++ b/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java @@ -4,10 +4,14 @@ import com.alibaba.fastjson.JSONObject; import ink.wgink.common.component.SecurityComponent; import ink.wgink.common.enums.RoleDataRightEnum; import ink.wgink.exceptions.AccessTokenException; +import ink.wgink.exceptions.AppTokenException; import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.TokenException; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.pojo.app.AppTokenUser; import ink.wgink.pojo.bos.UserInfoBO; import ink.wgink.pojo.dtos.ZTreeDTO; +import ink.wgink.util.ReflectUtil; import ink.wgink.util.date.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,13 +45,22 @@ public class DefaultBaseService { */ protected void setSaveInfo(Map params) { UserInfoBO userInfoBO = securityComponent.getCurrentUser(); - if (userInfoBO != null) { - setSave(userInfoBO.getUserId(), params); - } else { - setSave("1", params); + setSave(userInfoBO.getUserId(), params); + } + + protected AppTokenUser getAppTokenUser(String token) { + try { + return securityComponent.getAppTokenUser(token); + } catch (ReflectUtil.ReflectException e) { + throw new AppTokenException("未引入APP的依赖"); } } + protected void setAppSaveInfo(Map params, String token) { + AppTokenUser appTokenUser = getAppTokenUser(token); + setSave(appTokenUser.getId(), params); + } + /** * 设置新增基础信息 * diff --git a/common/src/main/java/ink/wgink/common/component/SecurityComponent.java b/common/src/main/java/ink/wgink/common/component/SecurityComponent.java index 3cd528ab..1a591dda 100644 --- a/common/src/main/java/ink/wgink/common/component/SecurityComponent.java +++ b/common/src/main/java/ink/wgink/common/component/SecurityComponent.java @@ -1,11 +1,17 @@ package ink.wgink.common.component; +import ink.wgink.interfaces.manager.IAppManager; +import ink.wgink.pojo.app.AppToken; +import ink.wgink.pojo.app.AppTokenUser; import ink.wgink.pojo.bos.*; import ink.wgink.pojo.dtos.CurrentUserIdInfoDTO; import ink.wgink.pojo.pos.DepartmentPO; import ink.wgink.pojo.pos.GroupPO; import ink.wgink.pojo.pos.PositionPO; import ink.wgink.pojo.pos.RolePO; +import ink.wgink.util.ReflectUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; @@ -25,6 +31,8 @@ import java.util.List; @Component public class SecurityComponent { + private static final Logger LOG = LoggerFactory.getLogger(SecurityComponent.class); + /** * 获取当前用户 * @@ -54,12 +62,6 @@ public class SecurityComponent { if (user instanceof UserInfoBO) { userInfoBO = (UserInfoBO) user; } - if (userInfoBO == null) { - userInfoBO = new UserInfoBO(); - userInfoBO.setUserId("1"); - userInfoBO.setUserName("admin"); - userInfoBO.setUserUsername("admin"); - } return userInfoBO; } @@ -158,4 +160,41 @@ public class SecurityComponent { return currentUserIdInfoDTO; } + /** + * AppManager + * + * @return + */ + public IAppManager getAppManager() throws ReflectUtil.ReflectException { + return ReflectUtil.getSingleInstance("ink.wgink.app.AppTokenManager", IAppManager.class); + } + + /** + * AppToken 对象 + * + * @param token + * @return + */ + public AppToken getAppToken(String token) throws ReflectUtil.ReflectException { + IAppManager appManager = getAppManager(); + if (appManager == null) { + return null; + } + return appManager.getToken(token); + } + + /** + * token 对应的 app 用户 + * + * @param token + * @return + */ + public AppTokenUser getAppTokenUser(String token) throws ReflectUtil.ReflectException { + AppToken appToken = getAppToken(token); + if (appToken == null) { + return null; + } + return appToken.getAppTokenUser(); + } + } diff --git a/common/src/main/java/ink/wgink/common/enums/ErrorResultCodeEnum.java b/common/src/main/java/ink/wgink/common/enums/ErrorResultCodeEnum.java deleted file mode 100644 index 89c669fa..00000000 --- a/common/src/main/java/ink/wgink/common/enums/ErrorResultCodeEnum.java +++ /dev/null @@ -1,43 +0,0 @@ -package ink.wgink.common.enums; - -/** - * @ClassName: ErrorResultCodeEnum - * @Description: 错误代码 - * @Author: WangGeng - * @Date: 2019/3/2 3:51 PM - * @Version: 1.0 - **/ -public enum ErrorResultCodeEnum { - - /** - * 错误类型 - */ - SYSTEM_ERROR(40001), - ENCODE_ERROR(40002), - DECODE_ERROR(40003), - TEXT_ILLEGAL(40101), - PARAMS_ERROR(40102), - QUERY_ERROR(40101), - SAVE_ERROR(40102), - UPDATE_ERROR(40103), - REMOVE_ERROR(40104), - FILE_ERROR(40401), - TEST_ERROR(40201), - LOGIN_OUT(40301), - TOKEN_ERROR(40302), - USERNAME_PASSWORD_ERROR(40303), - USER_EXIST(40304), - PERMISSION_ERROR(40401), - DEVICE_ERROR(40501), - DEVICE_VERSION_ERROR(40502); - - private int value; - - ErrorResultCodeEnum(int value) { - this.value = value; - } - - public int getValue() { - return value; - } -} diff --git a/common/src/main/java/ink/wgink/common/handler/AccessDenyHandler.java b/common/src/main/java/ink/wgink/common/handler/AccessDenyHandler.java index 3401465a..7e6eb5f5 100644 --- a/common/src/main/java/ink/wgink/common/handler/AccessDenyHandler.java +++ b/common/src/main/java/ink/wgink/common/handler/AccessDenyHandler.java @@ -1,7 +1,6 @@ package ink.wgink.common.handler; import com.alibaba.fastjson.JSONObject; -import ink.wgink.common.enums.ErrorResultCodeEnum; import ink.wgink.pojo.result.ErrorResult; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -28,7 +27,7 @@ public class AccessDenyHandler implements AccessDeniedHandler { if (contentType != null && contentType.contains(MediaType.APPLICATION_JSON_VALUE)) { response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setStatus(HttpStatus.FORBIDDEN.value()); - response.getWriter().write(JSONObject.toJSONString(new ErrorResult(ErrorResultCodeEnum.PERMISSION_ERROR.getValue(), "权限不足"))); + response.getWriter().write(JSONObject.toJSONString(new ErrorResult(ErrorResult.ErrorResultCodeEnum.PERMISSION_ERROR.getValue(), "权限不足"))); } else { response.setContentType(MediaType.TEXT_HTML_VALUE); request.getRequestDispatcher("/error/403.html").forward(request, response); diff --git a/module-file/pom.xml b/module-file/pom.xml index 069a8905..3cca457a 100644 --- a/module-file/pom.xml +++ b/module-file/pom.xml @@ -13,11 +13,6 @@ 文件模块 - - ink.wgink - basic-app - 1.0-SNAPSHOT - ink.wgink common diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java index cdd7b8aa..e9c92765 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/FileServiceImpl.java @@ -4,9 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import ink.wgink.app.AppTokenManager; import ink.wgink.common.base.DefaultBaseService; -import ink.wgink.common.enums.ErrorResultCodeEnum; import ink.wgink.exceptions.FileException; import ink.wgink.exceptions.ParamsException; import ink.wgink.exceptions.SaveException; @@ -20,6 +18,7 @@ import ink.wgink.module.file.pojo.dtos.FileInfoDTO; import ink.wgink.module.file.service.IFileService; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.pos.FilePO; +import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResultData; import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.util.ResourceUtil; @@ -312,7 +311,7 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService if (StringUtils.isBlank(token)) { setSaveInfo(params); } else { - setSaveInfoByUserId(params, AppTokenManager.getInstance().getToken(token).getAppTokenUser().getId()); + setAppSaveInfo(params, token); } fileDao.save(params); } @@ -442,7 +441,7 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService result.put("data", fileArray); } catch (Exception e) { LOG.error(e.getMessage(), e); - result.put("errno", ErrorResultCodeEnum.FILE_ERROR.getValue()); + result.put("errno", ErrorResult.ErrorResultCodeEnum.FILE_ERROR.getValue()); } return result; }