From 8d5120687d696a52935d6c9d58cf707b0a6e3c65 Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Tue, 15 Jan 2019 15:55:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/SECURITY.md | 2 +- pom.xml | 11 +- yexuejc-springboot-base/pom.xml | 9 +- .../autoconfigure/WebAutoConfiguration.java | 30 +- .../springboot/base/constant/BizConsts.java | 68 +---- .../springboot/base/constant/RespsCode.java | 161 +++++++++++ .../base/exception/BasicException.java | 70 +++++ .../base/exception/ClassConvertException.java | 49 ++++ .../base/exception/ClassConvertExeption.java | 24 -- .../base/exception/GatewayException.java | 39 ++- .../exception/GlobalExceptionHandler.java | 95 +++++++ .../base/exception/ImageException.java | 44 ++- .../base/exception/ParamsException.java | 48 ++++ .../ThirdPartyAuthorizationException.java | 52 ++-- .../exception/UserNotAuthoriayException.java | 36 ++- .../springboot/base/http/ResponseParams.java | 260 ++++++++++++++++++ ...onsumerAuthenticationProcessingFilter.java | 31 ++- .../ConsumerAuthenticationProvider.java | 16 +- .../base/security/UserDetailsManager.java | 6 +- .../springboot/base/util/ValidUtil.java | 20 ++ .../main/resources/META-INF/spring.factories | 3 +- .../base/security/MySecurityConfig.java | 37 +-- .../src/test/resources/application.properties | 28 +- 23 files changed, 899 insertions(+), 240 deletions(-) create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/RespsCode.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/BasicException.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertException.java delete mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertExeption.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GlobalExceptionHandler.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ParamsException.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/http/ResponseParams.java diff --git a/doc/SECURITY.md b/doc/SECURITY.md index 8eeee24..82f6187 100644 --- a/doc/SECURITY.md +++ b/doc/SECURITY.md @@ -163,7 +163,7 @@ yexuejc.redis.db1=true spring.redis.jedis.pool.max-active=100 spring.redis.jedis.pool.max-idle=10 spring.redis.jedis.pool.min-idle=3 -spring.redis.host=121.42.165.89 +spring.redis.host=103.45.101.109 spring.redis.password= spring.redis.port=16379 diff --git a/pom.xml b/pom.xml index babcdec..9662938 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 2.0.5 + 2.0.6 pom ${project.artifactId} @@ -20,7 +20,7 @@ - 1.2.4 + 1.3.9 https://nexus.yexuejc.club/repository/ http://maven.aliyun.com/nexus/content/groups/public @@ -63,13 +63,8 @@ - - - - - - com.yexuejc.base + top.yexuejc yexuejc-base ${yexuejc.base.version} diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml index 6d83a78..371ffe1 100644 --- a/yexuejc-springboot-base/pom.xml +++ b/yexuejc-springboot-base/pom.xml @@ -9,7 +9,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 2.0.5 + 2.0.6 @@ -23,13 +23,10 @@ - com.yexuejc.base + top.yexuejc yexuejc-base - - - - + diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java index 2737566..5c8e018 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/WebAutoConfiguration.java @@ -54,7 +54,6 @@ import java.util.List; @EnableConfigurationProperties(ValidationFilterProperties.class) public class WebAutoConfiguration extends WebMvcConfigurerAdapter { - public WebAutoConfiguration(ValidationFilterProperties properties) { this.properties = properties; } @@ -95,7 +94,6 @@ public class WebAutoConfiguration extends WebMvcConfigurerAdapter { /******************************************编码部分*****************************************************/ - /** * 添加拦截器 */ @@ -148,40 +146,14 @@ public class WebAutoConfiguration extends WebMvcConfigurerAdapter { return registration; } - @Bean /** * 是否开启HTTPS(SSL)请求证书验证忽略:默认false */ + @Bean @ConditionalOnProperty(name = "yexuejc.enable.ssl-ignore", matchIfMissing = false) public SSLUtil getSslUtil() { return new SSLUtil(); } - /** - * 全局异常处理 - */ - @ControllerAdvice - static class GlobalExceptionHandler { - private static final String ERROR_MSG = "系统错误,请联系管理员"; - /** - * 出现异常时用于返回Json数据 - * - * @param e - * @return - */ - @ExceptionHandler(value = Throwable.class) - @ResponseBody - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public Resps jsonErrorHandler(Throwable e) { - LogUtil.exceptionLogger.error("", e); - if (e instanceof GatewayException) { - return Resps.error(StrUtil.setStr(e.getMessage(), ERROR_MSG)); - } else if (e instanceof HttpRequestMethodNotSupportedException) { - return Resps.error("请求方式错误"); - } - return Resps.error(ERROR_MSG); - } - - } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/BizConsts.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/BizConsts.java index dd401d7..f7197ee 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/BizConsts.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/BizConsts.java @@ -1,78 +1,12 @@ package com.yexuejc.springboot.base.constant; /** - *
- * 名称:项目+业务code
- * 业务code:项目编号+业务编号
- *      base:100
- *      api:101
- *      wap:102
- *      admin:103
- * 
+ * 常用字段 * * @author: maxf * @date: 2018/3/13 19:43 */ public class BizConsts { - /** - * base_code:100 - */ - public static String BASE_CODE = "100"; - - /** - * 100001:该账户已被禁用 - */ - public static String BASE_IS_LOCK_CODE = BASE_CODE + "001"; - public static String BASE_IS_LOCK_MSG = "该账户已被禁用"; - /** - * 100002:该帐户已过期 - */ - public static String BASE_IS_EXPIRE_CODE = BASE_CODE + "002"; - public static String BASE_IS_EXPIRE_MSG = "该帐户已过期"; - /** - * 100003:登陆凭证已经过期,请重新登陆 - */ - public static String BASE_LOGIN_IS_EXPIRE_CODE = BASE_CODE + "003"; - public static String BASE_LOGIN_IS_EXPIRE_MSG = "登陆凭证已经过期,请重新登陆"; - /** - * 100004:该账户被锁定 - */ - public static String BASE_IS_LOCKED_CODE = BASE_CODE + "004"; - public static String BASE_IS_LOCKED_MSG = "该账户被锁定"; - /** - * 100005:身份验证凭证未找到 - */ - public static String BASE_CREDENTIALS_NOT_FOUND_CODE = BASE_CODE + "005"; - public static String BASE_CREDENTIALS_NOT_FOUND_MSG = "身份验证凭证未找到"; - /** - * 100006:密码错误 - */ - public static String BASE_PWD_IS_ERR_CODE = BASE_CODE + "006"; - public static String BASE_PWD_IS_ERR_MSG = "密码错误"; - /** - * 100007:该账户名不存在 - */ - public static String BASE_ACCOUNT_NOT_FOUND_CODE = BASE_CODE + "007"; - public static String BASE_ACCOUNT_NOT_FOUND_MSG = "该账户名不存在"; - /** - * 100008:登录时发生错误,请联系系统管理员 - */ - public static String BASE_SYS_ERR_CODE = BASE_CODE + "008"; - public static String BASE_SYS_ERR_MSG = "登录时发生错误,请联系系统管理员"; - /** - * 100009:权限不足 - */ - public static String BASE_NOT_ROLE_CODE = BASE_CODE + "009"; - public static String BASE_NOT_ROLE_MSG = "您无权访问该资源"; - /** - * 100010:尚未登陆 - */ - public static String BASE_NOT_LOGIN_CODE = BASE_CODE + "010"; - public static String BASE_NOT_LOGIN_MSG = "您尚未登陆"; - - - - /** * 用户登录发送短信验证码 */ diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/RespsCode.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/RespsCode.java new file mode 100644 index 0000000..4b6fc35 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/constant/RespsCode.java @@ -0,0 +1,161 @@ +package com.yexuejc.springboot.base.constant; + +/** + * 返回参数code-msg已经sub_code-sub_msg + *

IA_xxxx:表示子业务CODE 并且网关code为INS_AUTH

+ *

ACC.xxxx:表示账号相关

+ *

SYS.xxxx:表示系统(代码)相关

+ * + * @author maxf + * @version 1.0 + * @ClassName RespsCode + * @Description + * @date 2019/1/15 10:34 + */ +public enum RespsCode { + /**网关*******************************************************************************************/ + /** + * 成功 + */ + SUCCESS("10000", "请求成功"), + /** + * 服务不可用 + */ + SRV_ERR("20000", "服务不可用"), + /** + * 授权权限不足:有权限,但是有问题,一般包括授权过期,账号异常等 + */ + INS_AUTH("20001", "授权权限不足"), + /** + * 缺少必选参数 + */ + MIS_PARAM("40001", "缺少必选参数"), + /** + * 业务处理失败,对应业务错误码,明细错误码 + */ + BIZ_ERR("40004", "业务处理失败"), + /** + * 权限不足:没有权限 + */ + PERMISSION_DENIED("40006", "权限不足"), + /** + * 系统错误 + */ + INTERIOR_BIZ_ERR("99999", "系统错误"), + + /**INS_AUTH*******************************************************************************************/ + /** + *
+     * 20001:INS_AUTH
+     * ACC.IS_LOCK:该账户已被禁用
+     * 
+ */ + IA_IS_LOCK("ACC.IS_LOCK", "该账户已被禁用"), + + /** + *
+     * 20001:INS_AUTH
+     * ACC.IS_EXPIRE:该帐户已过期
+     * 
+ */ + IA_IS_EXPIRE("ACC.IS_EXPIRE", "该帐户已过期"), + + /** + *
+     * 20001:INS_AUTH
+     * ACC.LOGIN_IS_EXPIRE:登陆凭证已经过期,请重新登陆
+     * 
+ */ + IA_LOGIN_IS_EXPIRE("ACC.LOGIN_IS_EXPIRE", "登陆凭证已经过期,请重新登陆"), + /** + *
+     * 20001:INS_AUTH
+     * ACC.IS_LOCKED:该账户被锁定
+     * 
+ */ + IA_IS_LOCKED("ACC.IS_LOCKED", "该账户被锁定"), + /** + *
+     * 20001:INS_AUTH
+     * ACC.CREDENTIALS_NOT_FOUND:身份验证凭证未找到
+     * 
+ */ + IA_CREDENTIALS_NOT_FOUND("ACC.CREDENTIALS_NOT_FOUND", "身份验证凭证未找到"), + + /**BIZ_ERR*******************************************************************************************/ + /** + *
+     * 40004:BIZ_ERR
+     * ACC.PWD_IS_ERR:密码错误
+     * 
+ */ + BE_PWD_IS_ERR("ACC.PWD_IS_ERR", "密码错误"), + /** + *
+     * 40004:BIZ_ERR
+     * ACC.NOT_FOUND:该账户名不存在
+     * 
+ */ + BE_NOT_FOUND("ACC.NOT_FOUND", "该账户名不存在"), + /** + *
+     * 40004:BIZ_ERR
+     * SYS.GATEWAY:网关异常
+     * 
+ */ + BE_GATEWAY("SYS.GATEWAY", "网关异常"), + /** + *
+     * 40004:BIZ_ERR
+     * BIZ.IMG_FAIL:图片异常
+     * 
+ */ + BE_IMG_FAIL("BIZ.IMG_FAIL", "图片异常"), + /** + *
+     * 40004:BIZ_ERR
+     * ACC.LOGIN_AUTH:登录授权异常
+     * 
+ */ + BE_LOGIN_AUTH("ACC.LOGIN_AUTH", "登录授权异常"), + + /**PERMISSION_DENIED*******************************************************************************************/ + /** + *
+     * 40006:PERMISSION_DENIED
+     * ACC.NOT_LOGIN:未登录时访问需要权限的接口
+     * 
+ */ + PD_NOT_LOGIN("ACC.NOT_LOGIN", "您尚未登陆"), + /** + *
+     * 40006:PERMISSION_DENIED
+     * ACC.NOT_AUTH:用户缺少权限
+     * 
+ */ + PD_NOT_AUTH("ACC.NOT_AUTH", "用户缺少权限"), + + /**INTERIOR_BIZ_ERR*******************************************************************************************/ + /** + *
+     * 99999:INTERIOR_BIZ_ERR
+     * SYS.CONVERT_EXP:类转换异常
+     * 
+ */ + IBE_CONVERT_EXP("SYS.CONVERT_EXP", "类转换异常"); + + /** + * code + */ + public String code; + /** + * 信息 + */ + public String msg; + + RespsCode(String code, String msg) { + this.code = code; + this.msg = msg; + } + +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/BasicException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/BasicException.java new file mode 100644 index 0000000..b219ea6 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/BasicException.java @@ -0,0 +1,70 @@ +package com.yexuejc.springboot.base.exception; + +import com.yexuejc.springboot.base.constant.RespsCode; + +/** + * 异常基类 + * + *

1.里面必须实现网关异常消息

+ *

2.业务消息先取subCode,取不到会取respsSubCode

+ *

3.设置message为消息,自定义message优先获取,取不到会取respsSubCode带的message

+ *

4.respsSubCode和subCode都不存在,即没有sub_code(如果有message会替换网关message)

+ * + * @author maxf + * @version 1.0 + * @ClassName BasicException + * @Description + * @date 2019/1/15 11:52 + */ +public abstract class BasicException extends RuntimeException { + private static final long serialVersionUID = 8720020350158032819L; + /** + * 网关错误 + */ + protected RespsCode code; + /** + * 业务错误 + */ + protected RespsCode respsSubCode; + /** + * 自定义业务code + *

可以在respsSubCode中定义枚举,也可以直接传入subCode,message会获取异常message

+ */ + protected String subCode; + + + public BasicException setSubCode(String subCode) { + this.subCode = subCode; + return this; + } + + public BasicException() { + super(); + } + + public BasicException(String message) { + super(message); + } + + public BasicException(String message, Throwable cause) { + super(message, cause); + } + + public BasicException(String subCode, String message) { + super(message); + this.subCode = subCode; + } + + public BasicException(String subCode, String message, Throwable cause) { + super(message, cause); + this.subCode = subCode; + } + + public BasicException(Throwable cause) { + super(cause); + } + + protected BasicException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertException.java new file mode 100644 index 0000000..e9847d5 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertException.java @@ -0,0 +1,49 @@ +package com.yexuejc.springboot.base.exception; + +import com.yexuejc.springboot.base.constant.RespsCode; + +/** + * 类型转换异常 + *

INTERIOR_BIZ_ERR("99999", "系统错误")

+ *

IBE_CONVERT_EXP("SYS.CONVERT_EXP", "类转换异常")

+ * + * @author: maxf + * @date: 2018/5/12 18:36 + */ +public class ClassConvertException extends BasicException { + + private static final long serialVersionUID = -2390195902982826130L; + + { + this.code = RespsCode.INTERIOR_BIZ_ERR; + this.respsSubCode = RespsCode.IBE_CONVERT_EXP; + } + + public ClassConvertException() { + super(); + } + + public ClassConvertException(String message) { + super(message); + } + + public ClassConvertException(String message, Throwable cause) { + super(message, cause); + } + + public ClassConvertException(String subCode, String message) { + super(subCode, message); + } + + public ClassConvertException(String subCode, String message, Throwable cause) { + super(subCode, message, cause); + } + + public ClassConvertException(Throwable cause) { + super(cause); + } + + protected ClassConvertException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertExeption.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertExeption.java deleted file mode 100644 index 50c6df2..0000000 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ClassConvertExeption.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.yexuejc.springboot.base.exception; - -/** - * 类型转换异常 - * - * @author: maxf - * @date: 2018/5/12 18:36 - */ -public class ClassConvertExeption extends RuntimeException { - - private static final long serialVersionUID = -2390195902982826130L; - /** - * 错误码 - */ - private String code = "E"; - - public ClassConvertExeption() { - super("类型转换异常"); - } - - public ClassConvertExeption(String message) { - super(message); - } -} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GatewayException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GatewayException.java index 038a49c..6688bf7 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GatewayException.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GatewayException.java @@ -1,24 +1,49 @@ package com.yexuejc.springboot.base.exception; +import com.yexuejc.springboot.base.constant.RespsCode; + /** - * 网关异常 + * 网关异常 : 包含网关加解密,校验等 + *

BIZ_ERR("40004", "业务处理失败")

+ *

BE_GATEWAY("SYS.GATEWAY", "网关异常")

* * @author: maxf * @date: 2018/5/12 18:36 */ -public class GatewayException extends RuntimeException { +public class GatewayException extends BasicException { private static final long serialVersionUID = -2390195902982826130L; - /** - * 错误码 - */ - private String code = "E"; + + { + this.code = RespsCode.BIZ_ERR; + this.respsSubCode = RespsCode.BE_GATEWAY; + } public GatewayException() { - super("数据错误"); + super(); } public GatewayException(String message) { super(message); } + + public GatewayException(String message, Throwable cause) { + super(message, cause); + } + + public GatewayException(String subCode, String message) { + super(subCode, message); + } + + public GatewayException(String subCode, String message, Throwable cause) { + super(subCode, message, cause); + } + + public GatewayException(Throwable cause) { + super(cause); + } + + protected GatewayException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GlobalExceptionHandler.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..483d0fd --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/GlobalExceptionHandler.java @@ -0,0 +1,95 @@ +package com.yexuejc.springboot.base.exception; + +import com.yexuejc.base.util.StrUtil; +import com.yexuejc.springboot.base.constant.RespsCode; +import com.yexuejc.springboot.base.http.ResponseParams; +import com.yexuejc.springboot.base.util.LogUtil; +import org.springframework.beans.ConversionNotSupportedException; +import org.springframework.beans.TypeMismatchException; +import org.springframework.http.HttpStatus; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.security.core.AuthenticationException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpMediaTypeNotAcceptableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.ServletRequestBindingException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.context.request.async.AsyncRequestTimeoutException; +import org.springframework.web.multipart.support.MissingServletRequestPartException; +import org.springframework.web.servlet.NoHandlerFoundException; + +/** + * 全局异常处理 + *

处理成 response:200 返回

+ * + * @author maxf + * @version 1.0 + * @ClassName GlobalExceptionHandler + * @date 2018/12/26 17:49 + */ +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 出现异常时用于返回Json数据 + * + * @param e + * @return + */ + @ExceptionHandler({ + Throwable.class, + HttpRequestMethodNotSupportedException.class, + HttpMediaTypeNotSupportedException.class, + HttpMediaTypeNotAcceptableException.class, + MissingPathVariableException.class, + MissingServletRequestParameterException.class, + ServletRequestBindingException.class, + ConversionNotSupportedException.class, + TypeMismatchException.class, + HttpMessageNotReadableException.class, + HttpMessageNotWritableException.class, + MethodArgumentNotValidException.class, + MissingServletRequestPartException.class, + BindException.class, + NoHandlerFoundException.class, + AsyncRequestTimeoutException.class, + NullPointerException.class, + AuthenticationException.class + }) + @ResponseBody + @ResponseStatus(HttpStatus.OK) + public ResponseParams jsonErrorHandler(Throwable e) { + LogUtil.exceptionLogger.error("", e); + if (e instanceof BasicException) { + //自定义异常 + BasicException exp = (BasicException) e; + String msg = StrUtil.isNotEmpty(exp.getMessage()) ? exp.getMessage() : + exp.respsSubCode != null ? exp.respsSubCode.msg : exp.code.msg; + + ResponseParams responseParams = new ResponseParams(); + responseParams.setCode(exp.code); + responseParams.setSubCode(StrUtil.isNotEmpty(exp.subCode) ? exp.subCode : + exp.respsSubCode != null ? exp.respsSubCode.code : null); + if (StrUtil.isEmpty(responseParams.getSubCode())) { + responseParams.setMsg(msg); + } else { + responseParams.setSubMsg(msg); + } + return responseParams; + } else if (e instanceof HttpRequestMethodNotSupportedException) { + return ResponseParams.resps(RespsCode.INTERIOR_BIZ_ERR); + } else if (e instanceof HttpMessageNotReadableException) { + return ResponseParams.resps(RespsCode.MIS_PARAM); + } + return ResponseParams.resps(RespsCode.INTERIOR_BIZ_ERR); + } + +} \ No newline at end of file diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java index 35c478b..62caeb7 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java @@ -1,24 +1,52 @@ package com.yexuejc.springboot.base.exception; -public class ImageException extends RuntimeException { +import com.yexuejc.springboot.base.constant.RespsCode; + +/** + * 图片异常 + *

BIZ_ERR("40004", "业务处理失败")

+ *

BE_IMG_FAIL("BIZ.IMG_FAIL", "图片异常")

+ * + * @author maxf + * @version 1.0 + * @ClassName ImageException + * @Description + * @date 2019/1/15 13:54 + */ +public class ImageException extends BasicException { private static final long serialVersionUID = -2390195902982826130L; - private String code = "E"; + + { + this.code = RespsCode.BIZ_ERR; + this.respsSubCode = RespsCode.BE_IMG_FAIL; + } public ImageException() { - super("图片异常"); + super(); } public ImageException(String message) { super(message); } - public ImageException(String msg, Throwable t) { - super(msg, t); + public ImageException(String message, Throwable cause) { + super(message, cause); } - public ImageException(String code, String msg, Throwable t) { - super(msg, t); - this.code = code; + public ImageException(String subCode, String message) { + super(subCode, message); + } + + public ImageException(String subCode, String message, Throwable cause) { + super(subCode, message, cause); + } + + public ImageException(Throwable cause) { + super(cause); + } + + protected ImageException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ParamsException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ParamsException.java new file mode 100644 index 0000000..55b58f4 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ParamsException.java @@ -0,0 +1,48 @@ +package com.yexuejc.springboot.base.exception; + +import static com.yexuejc.springboot.base.constant.RespsCode.MIS_PARAM; + +/** + * 参数错误 + * + * @author maxf + * @version 1.0 + * @ClassName ParamsException + * @Description + * @date 2019/1/15 15:44 + */ +public class ParamsException extends BasicException { + private static final long serialVersionUID = 4645399726493530751L; + + { + this.code = MIS_PARAM; + } + + public ParamsException() { + super(); + } + + public ParamsException(String message) { + super(message); + } + + public ParamsException(String message, Throwable cause) { + super(message, cause); + } + + public ParamsException(String subCode, String message) { + super(subCode, message); + } + + public ParamsException(String subCode, String message, Throwable cause) { + super(subCode, message, cause); + } + + public ParamsException(Throwable cause) { + super(cause); + } + + protected ParamsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ThirdPartyAuthorizationException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ThirdPartyAuthorizationException.java index 6cf3f17..aaaf1f9 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ThirdPartyAuthorizationException.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ThirdPartyAuthorizationException.java @@ -1,42 +1,46 @@ package com.yexuejc.springboot.base.exception; -import org.springframework.security.core.AuthenticationException; +import com.yexuejc.springboot.base.constant.RespsCode; /** * 第三方授权异常 + *

BIZ_ERR("40004", "业务处理失败")

+ *

BE_LOGIN_AUTH("ACC.LOGIN_AUTH", "登录授权异常")

* * @author: maxf * @date: 2018/5/27 19:20 */ -public class ThirdPartyAuthorizationException extends AuthenticationException { - /** - * 错误码 - */ - private String code = "E"; - - public ThirdPartyAuthorizationException(String msg, Throwable t) { - super(msg, t); - } - - public ThirdPartyAuthorizationException(String msg) { - super(msg); +public class ThirdPartyAuthorizationException extends BasicException { + { + this.code = RespsCode.BIZ_ERR; + this.respsSubCode = RespsCode.BE_LOGIN_AUTH; } public ThirdPartyAuthorizationException() { - super("授权异常"); + super(); } - public ThirdPartyAuthorizationException(Throwable t) { - super("授权异常", t); - } - - - public ThirdPartyAuthorizationException(String code, String message) { + public ThirdPartyAuthorizationException(String message) { super(message); - this.code = code; } - public ThirdPartyAuthorizationException(String code, String msg, Throwable t) { - super(msg, t); - this.code = code; + + public ThirdPartyAuthorizationException(String message, Throwable cause) { + super(message, cause); + } + + public ThirdPartyAuthorizationException(String subCode, String message) { + super(subCode, message); + } + + public ThirdPartyAuthorizationException(String subCode, String message, Throwable cause) { + super(subCode, message, cause); + } + + public ThirdPartyAuthorizationException(Throwable cause) { + super(cause); + } + + protected ThirdPartyAuthorizationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/UserNotAuthoriayException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/UserNotAuthoriayException.java index e57e42d..a40e449 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/UserNotAuthoriayException.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/UserNotAuthoriayException.java @@ -1,9 +1,10 @@ package com.yexuejc.springboot.base.exception; -import org.springframework.security.core.AuthenticationException; +import com.yexuejc.springboot.base.constant.RespsCode; /** * 用户无权限 + *

PERMISSION_DENIED("40006", "权限不足")

* * @author maxf * @version 1.0 @@ -11,18 +12,39 @@ import org.springframework.security.core.AuthenticationException; * @Description * @date 2018/11/20 20:13 */ -public class UserNotAuthoriayException extends AuthenticationException { +public class UserNotAuthoriayException extends BasicException { private static final long serialVersionUID = 7752594158082817319L; + { + this.code = RespsCode.PERMISSION_DENIED; + this.respsSubCode = RespsCode.PD_NOT_AUTH; + } + public UserNotAuthoriayException() { - super("用户缺少权限"); + super(); } - public UserNotAuthoriayException(String msg, Throwable t) { - super(msg, t); + public UserNotAuthoriayException(String message) { + super(message); } - public UserNotAuthoriayException(String msg) { - super(msg); + public UserNotAuthoriayException(String message, Throwable cause) { + super(message, cause); + } + + public UserNotAuthoriayException(String subCode, String message) { + super(subCode, message); + } + + public UserNotAuthoriayException(String subCode, String message, Throwable cause) { + super(subCode, message, cause); + } + + public UserNotAuthoriayException(Throwable cause) { + super(cause); + } + + protected UserNotAuthoriayException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/http/ResponseParams.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/http/ResponseParams.java new file mode 100644 index 0000000..ea330c4 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/http/ResponseParams.java @@ -0,0 +1,260 @@ +package com.yexuejc.springboot.base.http; + +import com.yexuejc.base.util.JsonUtil; +import com.yexuejc.springboot.base.constant.RespsCode; + +/** + * 输出加密结果 + * + * @author maxf + * @version 1.0 + * @ClassName ResponseParams + * @Description + * @date 2018/12/20 16:05 + */ +public class ResponseParams { + /** + * 消息 + */ + private String msg; + /** + * 业务code + */ + private String code; + /** + * 详细业务code + */ + private String subCode; + /** + * 详细业务msg + */ + private String subMsg; + /** + * 加密业务内容 + */ + private Object content; + /** + * 签名 + */ + private String sign; + /** + * 秒级时间戳 + */ + private Long timestemp; + + public ResponseParams() { + } + + public ResponseParams(RespsCode respsCode) { + this.code = respsCode.code; + this.msg = respsCode.msg; + } + + /** + * 直接new 一个 网关code msg + * + * @param code 网关code + * @param msg 网关msg + * @return + */ + public ResponseParams(String code, String msg) { + this.code = code; + this.msg = msg; + } + + /** + * 网关(code,msg) 带 content + * + * @param respsCode 网关(code,msg) + * @param content 网关返回内容 + */ + public ResponseParams(RespsCode respsCode, Object content) { + this.code = respsCode.code; + this.msg = respsCode.msg; + this.content = content; + } + + /** + * 直接new 一个 网关code msg + * + * @param code 网关code + * @param msg 网关msg + * @return + */ + public static ResponseParams resps(String code, String msg) { + return new ResponseParams(code, msg); + } + + /** + * 直接new 一个 网关code msg + * + * @param respsCode 网关(code,msg) + * @return + */ + public static ResponseParams resps(RespsCode respsCode) { + return new ResponseParams(respsCode); + } + + /** + * 网关(code,msg) 带 content + * + * @param respsCode 网关(code,msg) + * @param content 网关返回内容 + */ + public static ResponseParams resps(RespsCode respsCode, Object content) { + return new ResponseParams(respsCode, content); + } + + /** + * 网关(code,msg)+ 业务(sub_code,sub_msg) + * + * @param respsCode 网关(code,msg) + * @param subCode 业务(sub_code,sub_msg) + * @return + */ + public static ResponseParams resps(RespsCode respsCode, RespsCode subCode) { + ResponseParams responseParams = new ResponseParams(respsCode); + responseParams.setSub(subCode); + return responseParams; + } + + /** + * 网关(code,msg)+ 业务(sub_code,sub_msg)+ content + * + * @param respsCode 网关(code,msg) + * @param subCode 业务(sub_code,sub_msg) + * @param content 网关返回内容 + * @return + */ + public static ResponseParams resps(RespsCode respsCode, RespsCode subCode, Object content) { + ResponseParams responseParams = new ResponseParams(respsCode, content); + responseParams.setSub(subCode); + return responseParams; + } + + /** + * 操作成功 + *

code: SUCCESS("10000", "请求成功")

+ * + * @return + */ + public static ResponseParams succ() { + ResponseParams responseParams = new ResponseParams(RespsCode.SUCCESS); + return responseParams; + } + + /** + * 业务错误 + *

code: BIZ_ERR("40004", "业务处理失败")

+ * + * @param subCode 业务 sub_code + * @param subMsg 业务 sub_msg + * @return + */ + public static ResponseParams fail(String subCode, String subMsg) { + ResponseParams responseParams = new ResponseParams(RespsCode.BIZ_ERR); + responseParams.setSub(subCode, subMsg); + return responseParams; + } + + /** + * 系统错误 + *

code: INTERIOR_BIZ_ERR("99999", "系统错误")

+ * + * @param subCode 业务 sub_code + * @param subMsg 业务 sub_msg + * @return + */ + public static ResponseParams err(String subCode, String subMsg) { + ResponseParams responseParams = new ResponseParams(RespsCode.INTERIOR_BIZ_ERR); + responseParams.setSub(subCode, subMsg); + return responseParams; + } + + public ResponseParams setSub(RespsCode respsCode) { + this.subCode = respsCode.code; + this.subMsg = respsCode.msg; + return this; + } + + public ResponseParams setSub(String subCode, String subMsg) { + this.subCode = subCode; + this.subMsg = subMsg; + return this; + } + + @Override + public String toString() { + return JsonUtil.obj2Json(this); + } + + public String getSubCode() { + return subCode; + } + + public ResponseParams setSubCode(String subCode) { + this.subCode = subCode; + return this; + } + + public String getSubMsg() { + return subMsg; + } + + public ResponseParams setSubMsg(String subMsg) { + this.subMsg = subMsg; + return this; + } + + public String getMsg() { + return msg; + } + + public ResponseParams setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getCode() { + return code; + } + + public ResponseParams setCode(String code) { + this.code = code; + return this; + } + + public ResponseParams setCode(RespsCode code) { + this.code = code.code; + this.msg = code.msg; + return this; + } + + public Object getContent() { + return content; + } + + public ResponseParams setContent(Object content) { + this.content = content; + return this; + } + + public Long getTimestemp() { + return timestemp; + } + + public ResponseParams setTimestemp(Long timestemp) { + this.timestemp = timestemp; + return this; + } + + public String getSign() { + return sign; + } + + public ResponseParams setSign(String sign) { + this.sign = sign; + return this; + } + +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProcessingFilter.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProcessingFilter.java index 27c37ec..89da6c5 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProcessingFilter.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProcessingFilter.java @@ -1,6 +1,7 @@ package com.yexuejc.springboot.base.security; import com.yexuejc.springboot.base.constant.LogTypeConsts; +import com.yexuejc.springboot.base.exception.ParamsException; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.ProviderManager; @@ -42,15 +43,15 @@ public class ConsumerAuthenticationProcessingFilter extends AbstractAuthenticati protected static final String SPRING_SECURITY_FORM_SEX_KEY = "sex"; /********************************** 第三方登录时附带信息*************************************/ - protected String usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY; - protected String passwordParameter = SPRING_SECURITY_FORM_PASSWORD_KEY; - protected String logtypeParameter = SPRING_SECURITY_FORM_LOGTYPE_KEY; - protected String openidParameter = SPRING_SECURITY_FORM_OPENID_KEY; - protected String headParameter = SPRING_SECURITY_FORM_HEAD_KEY; - protected String nicknameParameter = SPRING_SECURITY_FORM_NICKNAME_KEY; - protected String sexParameter = SPRING_SECURITY_FORM_SEX_KEY; - protected boolean postOnly = true; - protected boolean reverse = true; + protected String usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY; + protected String passwordParameter = SPRING_SECURITY_FORM_PASSWORD_KEY; + protected String logtypeParameter = SPRING_SECURITY_FORM_LOGTYPE_KEY; + protected String openidParameter = SPRING_SECURITY_FORM_OPENID_KEY; + protected String headParameter = SPRING_SECURITY_FORM_HEAD_KEY; + protected String nicknameParameter = SPRING_SECURITY_FORM_NICKNAME_KEY; + protected String sexParameter = SPRING_SECURITY_FORM_SEX_KEY; + protected boolean postOnly = true; + protected boolean reverse = true; // ~ Constructors // =================================================================================================== @@ -125,7 +126,11 @@ public class ConsumerAuthenticationProcessingFilter extends AbstractAuthenticati switch (logtype) { case LogTypeConsts.SMS: //短信登录 - username = obtainUsername(request); + try { + username = obtainUsername(request); + } catch (Exception e) { + throw new ParamsException(); + } smscode = obtainPassword(request); break; case LogTypeConsts.QQ: @@ -151,7 +156,11 @@ public class ConsumerAuthenticationProcessingFilter extends AbstractAuthenticati break; default: //默认账号+密码登录 - username = obtainUsername(request).trim(); + try { + username = obtainUsername(request).trim(); + } catch (Exception e) { + throw new ParamsException(); + } password = obtainPassword(request); break; } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProvider.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProvider.java index 7b78577..5d30886 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProvider.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/ConsumerAuthenticationProvider.java @@ -4,10 +4,11 @@ import com.yexuejc.base.pojo.ApiVO; import com.yexuejc.base.util.StrUtil; import com.yexuejc.springboot.base.constant.BizConsts; import com.yexuejc.springboot.base.constant.LogTypeConsts; -import com.yexuejc.springboot.base.exception.ClassConvertExeption; +import com.yexuejc.springboot.base.exception.ClassConvertException; import com.yexuejc.springboot.base.exception.ThirdPartyAuthorizationException; import com.yexuejc.springboot.base.security.inte.User; import com.yexuejc.springboot.base.security.inte.UserService; +import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.InternalAuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider; @@ -70,7 +71,6 @@ public class ConsumerAuthenticationProvider extends AbstractUserDetailsAuthentic protected UserDetailsService userDetailsService; protected final UserService accountView; - public ConsumerAuthenticationProvider(UserDetailsService userDetailsService, UserService accountView) { // super(); super.setHideUserNotFoundExceptions(false); @@ -104,11 +104,15 @@ public class ConsumerAuthenticationProvider extends AbstractUserDetailsAuthentic @Override protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { - String requestPwd = authentication.getCredentials().toString(); + String requestPwd = null; + try { + requestPwd = authentication.getCredentials().toString(); + } catch (Exception e) { + throw new BadCredentialsException("密码错误"); + } if (authentication instanceof ConsumerToken) { ConsumerToken consumerToken = (ConsumerToken) authentication; - displyAuthenticationChecks(consumerToken, requestPwd, userDetails.getPassword()); } } @@ -231,7 +235,7 @@ public class ConsumerAuthenticationProvider extends AbstractUserDetailsAuthentic loadedUser = (UserDetails) obj; return loadedUser; } else { - throw new ClassConvertExeption("获取登录用户信息返回结果类型必须是com.yexuejc.springboot.base.security.inte.User实现类" + + throw new ClassConvertException("获取登录用户信息返回结果类型必须是com.yexuejc.springboot.base.security.inte.User实现类" + "或者org.springframework.security.core.userdetails.UserDetails实现类" + "或者com.yexuejc.springboot.base.security.ConsumerUser继承类"); } @@ -251,7 +255,7 @@ public class ConsumerAuthenticationProvider extends AbstractUserDetailsAuthentic loadedUser = (UserDetails) obj; return loadedUser; } else { - throw new ClassConvertExeption("获取登录用户信息返回结果类型必须是com.yexuejc.springboot.base.security.inte.User实现类" + + throw new ClassConvertException("获取登录用户信息返回结果类型必须是com.yexuejc.springboot.base.security.inte.User实现类" + "或者org.springframework.security.core.userdetails.UserDetails实现类" + "或者com.yexuejc.springboot.base.security.ConsumerUser继承类"); } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/UserDetailsManager.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/UserDetailsManager.java index 42a563f..809f56a 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/UserDetailsManager.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/security/UserDetailsManager.java @@ -1,7 +1,7 @@ package com.yexuejc.springboot.base.security; import com.yexuejc.base.util.StrUtil; -import com.yexuejc.springboot.base.exception.ClassConvertExeption; +import com.yexuejc.springboot.base.exception.ClassConvertException; import com.yexuejc.springboot.base.exception.UserNotAuthoriayException; import com.yexuejc.springboot.base.security.inte.User; import com.yexuejc.springboot.base.security.inte.UserService; @@ -35,7 +35,7 @@ public class UserDetailsManager extends InMemoryUserDetailsManager { return loadUser(username); } - protected ConsumerUser loadUser(String username) throws UsernameNotFoundException{ + protected ConsumerUser loadUser(String username) throws UsernameNotFoundException { Object user = userService.getConsumerByUserName(username); if (user instanceof User) { User consumer = (User) user; @@ -57,7 +57,7 @@ public class UserDetailsManager extends InMemoryUserDetailsManager { } else if (user instanceof ConsumerUser) { return (ConsumerUser) user; } else { - throw new ClassConvertExeption("获取登录用户信息返回结果类型必须是com.yexuejc.springboot.base.security.inte.User实现类" + + throw new ClassConvertException("获取登录用户信息返回结果类型必须是com.yexuejc.springboot.base.security.inte.User实现类" + "或者com.yexuejc.springboot.base.security.ConsumerUser继承类"); } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/ValidUtil.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/ValidUtil.java index c04f406..4adbb51 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/ValidUtil.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/ValidUtil.java @@ -2,6 +2,8 @@ package com.yexuejc.springboot.base.util; import com.yexuejc.base.constant.RespsConsts; import com.yexuejc.base.http.Resps; +import com.yexuejc.springboot.base.constant.RespsCode; +import com.yexuejc.springboot.base.http.ResponseParams; import org.springframework.http.HttpStatus; import org.springframework.validation.Errors; import org.springframework.validation.ObjectError; @@ -28,6 +30,7 @@ public class ValidUtil { * @param errors * @return * @throws IOException + * @since 1.0 */ public static Resps errResps(HttpServletResponse response, Errors errors) throws IOException { List objectErrorList = errors.getAllErrors(); @@ -39,4 +42,21 @@ public class ValidUtil { return Resps.error(RespsConsts.CODE_VALIDATION, err); } + /** + * 参数加密使用; 检查SpringMVC提交是否有数据校验错误,如果有错则直接response错误信息 + * + * @param errors + * @return + * @throws IOException + * @since 2.0 + */ + public static ResponseParams errResps2( Errors errors) { + List objectErrorList = errors.getAllErrors(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < objectErrorList.size(); i++) { + sb.append(i + 1 + ":" + objectErrorList.get(i).getDefaultMessage() + ";"); + } + return ResponseParams.resps(RespsCode.MIS_PARAM.code, sb.toString().substring(0, sb.length() - 1)); + } + } \ No newline at end of file diff --git a/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories b/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories index fef1b9a..44b1e4f 100644 --- a/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories +++ b/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories @@ -4,5 +4,6 @@ com.yexuejc.springboot.base.autoconfigure.OssAutoConfiguration,\ com.yexuejc.springboot.base.autoconfigure.MutiRedisAutoConfiguration,\ com.yexuejc.springboot.base.filter.ParamsRequestBodyAdvice,\ com.yexuejc.springboot.base.filter.ParamsResponseBodyAdvice,\ -com.yexuejc.springboot.base.autoconfigure.MnsAutoConfiguration +com.yexuejc.springboot.base.autoconfigure.MnsAutoConfiguration,\ +com.yexuejc.springboot.base.exception.GlobalExceptionHandler diff --git a/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/security/MySecurityConfig.java b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/security/MySecurityConfig.java index c59006f..c731d49 100644 --- a/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/security/MySecurityConfig.java +++ b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/security/MySecurityConfig.java @@ -1,6 +1,5 @@ package com.yexuejc.springboot.base.security; -import com.yexuejc.base.constant.RespsConsts; import com.yexuejc.base.http.Resps; import com.yexuejc.base.util.JsonUtil; import com.yexuejc.base.util.JwtUtil; @@ -8,8 +7,8 @@ import com.yexuejc.base.util.RegexUtil; import com.yexuejc.base.util.StrUtil; import com.yexuejc.springboot.base.autoconfigure.MutiRedisAutoConfiguration; import com.yexuejc.springboot.base.constant.BizConsts; -import com.yexuejc.springboot.base.exception.ThirdPartyAuthorizationException; -import com.yexuejc.springboot.base.exception.UserNotAuthoriayException; +import com.yexuejc.springboot.base.constant.RespsCode; +import com.yexuejc.springboot.base.http.ResponseParams; import com.yexuejc.springboot.base.security.inte.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -112,27 +111,23 @@ public class MySecurityConfig extends SecurityConfig { filter.setAuthenticationFailureHandler((request, response, exception) -> { response.setContentType("application/json;charset=UTF-8"); response.setStatus(HttpStatus.UNAUTHORIZED.value()); - Resps resps = new Resps(); + ResponseParams resps; if (exception instanceof DisabledException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_IS_LOCK_MSG}); + resps = ResponseParams.resps(RespsCode.INS_AUTH).setSub(RespsCode.IA_IS_LOCK); } else if (exception instanceof AccountExpiredException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_IS_EXPIRE_MSG}); + resps = ResponseParams.resps(RespsCode.INS_AUTH).setSub(RespsCode.IA_IS_EXPIRE); } else if (exception instanceof CredentialsExpiredException) { - resps.setErr(BizConsts.BASE_LOGIN_IS_EXPIRE_CODE, new String[]{BizConsts.BASE_LOGIN_IS_EXPIRE_MSG}); + resps = ResponseParams.resps(RespsCode.INS_AUTH).setSub(RespsCode.IA_LOGIN_IS_EXPIRE); } else if (exception instanceof LockedException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_IS_LOCKED_MSG}); + resps = ResponseParams.resps(RespsCode.INS_AUTH).setSub(RespsCode.IA_IS_LOCKED); } else if (exception instanceof AuthenticationCredentialsNotFoundException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_CREDENTIALS_NOT_FOUND_MSG}); - } else if (exception instanceof ThirdPartyAuthorizationException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{exception.getMessage()}); + resps = ResponseParams.resps(RespsCode.INS_AUTH).setSub(RespsCode.IA_CREDENTIALS_NOT_FOUND); } else if (exception instanceof BadCredentialsException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_PWD_IS_ERR_MSG}); + resps = ResponseParams.resps(RespsCode.BIZ_ERR).setSub(RespsCode.BE_PWD_IS_ERR); } else if (exception instanceof UsernameNotFoundException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_ACCOUNT_NOT_FOUND_MSG}); - } else if (exception instanceof UserNotAuthoriayException) { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{exception.getMessage()}); + resps = ResponseParams.resps(RespsCode.BIZ_ERR).setSub(RespsCode.BE_NOT_FOUND); } else { - resps.setErr(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_SYS_ERR_MSG}); + resps = ResponseParams.resps(RespsCode.INS_AUTH); } response.getWriter().write(JsonUtil.obj2Json(resps)); response.getWriter().close(); @@ -171,10 +166,7 @@ public class MySecurityConfig extends SecurityConfig { response.setContentType("application/json;charset=UTF-8"); response.setStatus(401); response.getWriter().write( - JsonUtil.obj2Json( - Resps.error(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_NOT_LOGIN_MSG}) - ) - ); + ResponseParams.resps(RespsCode.PERMISSION_DENIED, RespsCode.PD_NOT_LOGIN).toString()); response.getWriter().close(); }); // 已登录,但当前用户没有访问的某个接口的权限时的处理 @@ -182,10 +174,7 @@ public class MySecurityConfig extends SecurityConfig { response.setContentType("application/json;charset=UTF-8"); response.setStatus(401); response.getWriter().write( - JsonUtil.obj2Json( - Resps.error(RespsConsts.CODE_FAIL, new String[]{BizConsts.BASE_NOT_ROLE_MSG}) - ) - ); + ResponseParams.resps(RespsCode.PERMISSION_DENIED, RespsCode.PD_NOT_LOGIN).toString()); response.getWriter().close(); }); } diff --git a/yexuejc-springboot-base/src/test/resources/application.properties b/yexuejc-springboot-base/src/test/resources/application.properties index b7da733..bae6ff4 100644 --- a/yexuejc-springboot-base/src/test/resources/application.properties +++ b/yexuejc-springboot-base/src/test/resources/application.properties @@ -1,5 +1,5 @@ server.port=8888 -spring.application.name=@pom.artifactId@ +spring.application.name=yexuejc-springboot-parent #log logging.level.root=info @@ -11,22 +11,22 @@ yexuejc.http.filter.type=1 yexuejc.http.encrypt.encrypt=true yexuejc.http.encrypt.decrypt=true -#Կʽ +#������Կ��ʽ #yexuejc.http.encrypt.private-key=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAiSo5blJ9-QJ0_QElcy5AaRTq-3oO4lJ8PvIOIt-Xr5SUFODVj3DUbiy6_0bxQYO3NiYHlXPb37UVV3jjlXJsXwIDAQABAkBE0WOJH2hGs93gRl_0vwLf9ffDfkTTdlER_73p70aad3QZRslEkinQH7G5aE_DgBm5m72TCeH-PD2FZ2lwtavBAiEAvnRown5Lpqbl0tN_OUxr_e1u9d_-8dNL_JEETO7BZCECIQC4XtY-18j0bVVLxaXPjKQ00D59yntwObihDNyRK0nAfwIgHPHEGgrnpGQo-Wl7JFIg925mNqfcLxRVsAS6CpcefQECIQCUsLdsmy6QIhTmNRJSXoSXq1KatE_05DhIekzwLs8eFQIgfMawMiu52ZxBI5_pZ7ancQZ6Dsxl45utFqJShzV1pio #yexuejc.http.encrypt.public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIkqOW5SffkCdP0BJXMuQGkU6vt6DuJSfD7yDiLfl6-UlBTg1Y9w1G4suv9G8UGDtzYmB5Vz29-1FVd445VybF8CAwEAAQ -#֤鷽ʽ +#����֤�鷽ʽ yexuejc.http.encrypt.private-key-path=/lgfishing.keystore yexuejc.http.encrypt.private-alias=lgfishing yexuejc.http.encrypt.private-pwd=lgfishing2018 -# +#���� spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true server.tomcat.uri-encoding=UTF-8 -#ǷHTTPSSSL֤֤ԣĬfalse +#�Ƿ���HTTPS��SSL������֤����֤���ԣ�Ĭ��false yexuejc.enable.ssl-ignore=true @@ -48,14 +48,14 @@ yexuejc.alibaba.oss.bucket=guansichou #======================================================================================================================== -# security +# security��� #reids -#ָredisdb0ĬϿ +#����ָ��redis��db0Ĭ�Ͽ��� yexuejc.redis.db1=true spring.redis.jedis.pool.max-active=100 spring.redis.jedis.pool.max-idle=10 spring.redis.jedis.pool.min-idle=3 -spring.redis.host=121.42.165.89 +spring.redis.host=103.45.101.109 spring.redis.password= spring.redis.port=16379 @@ -75,19 +75,19 @@ spring.datasource.data=classpath:db/data.sql #======================================================================================================================== #mybatis-plus mybatis-plus.mapper-locations=classpath*:mapper/*.xml -#ʵɨ裬packageöŻ߷ֺŷָ +#ʵ��ɨ�裬���package�ö��Ż��߷ֺŷָ� mybatis-plus.type-aliases-package=com.yexuejc.springboot.base.security.domain -#0:"ݿID", 1:"ûID",2:"Ϊδ", 3:"ȫΨһID UUID",4:ȫΨһID (UUID),5:ַȫΨһID (idWorker ַʾ); +#��������0:"���ݿ�ID����", 1:"�û�����ID",2:"������Ϊδ������������", 3:"ȫ��ΨһID UUID",4:ȫ��ΨһID (UUID),5:�ַ���ȫ��ΨһID (idWorker ���ַ�����ʾ); mybatis-plus.global-config.db-config.id-type=uuid mybatis-plus.global-config.db-config.db-type=POSTGRE_SQL -#ֶβ 0:"ж",1:" NULL ж"),2:"ǿж" +#�ֶβ��� 0:"�����ж�",1:"�� NULL �ж�"),2:"�ǿ��ж�" mybatis-plus.global-config.db-config.field-strategy=not_empty -#շ»ת +#�շ��»���ת�� mybatis-plus.global-config.db-config.column-underline=true -#߼ɾã3ã +#�߼�ɾ�����ã�����3�����ã� mybatis-plus.global-config.db-config.logic-delete-value=true mybatis-plus.global-config.db-config.logic-not-delete-value=false -#÷ݿ(column»&&javaʵշ)ԶƥasûSQLҪдas select user_id as userId +#���÷������ݿ�(column�»�������&&����javaʵ�����շ�����)���Զ�ƥ������as��û���������SQL��Ҫдas�� select user_id as userId�� mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.configuration.cache-enabled=false #========================================================================================================================