From d6cfe058a82e1696b9e193d50c11f94d652bf904 Mon Sep 17 00:00:00 2001 From: dimengzhe <251008545@qq.com> Date: Thu, 14 Apr 2022 20:00:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E5=85=B3=E8=BF=81=E7=A7=BB=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/yxt/anrui/AuthFilter.java | 30 +-- .../java/com/yxt/anrui/utils/HttpStatus.java | 21 ++ .../com/yxt/anrui/utils/IResultCodeMsg.java | 44 ++++ .../src/main/java/com/yxt/anrui/utils/R.java | 104 ---------- .../java/com/yxt/anrui/utils/ResultBean.java | 191 ++++++++++++++++++ 5 files changed, 271 insertions(+), 119 deletions(-) create mode 100644 anrui-gateway/src/main/java/com/yxt/anrui/utils/HttpStatus.java create mode 100644 anrui-gateway/src/main/java/com/yxt/anrui/utils/IResultCodeMsg.java delete mode 100644 anrui-gateway/src/main/java/com/yxt/anrui/utils/R.java create mode 100644 anrui-gateway/src/main/java/com/yxt/anrui/utils/ResultBean.java diff --git a/anrui-gateway/src/main/java/com/yxt/anrui/AuthFilter.java b/anrui-gateway/src/main/java/com/yxt/anrui/AuthFilter.java index 5b8e02cd16..b54a1c00a8 100644 --- a/anrui-gateway/src/main/java/com/yxt/anrui/AuthFilter.java +++ b/anrui-gateway/src/main/java/com/yxt/anrui/AuthFilter.java @@ -22,9 +22,9 @@ import reactor.core.publisher.Mono; * @date 2020/12/2 9:52 * @description 网关鉴权 * 1.某些接口不需要不进行登录验证,如登录,注册,获取验证码等接口。(uri白名单) - *2.某些接口需要登录验证,但是不需要刷新token有效时间,如客户端轮询请求的接口。 - *3.特定场景下IP黑、白名单。 - *4.处于安全考虑的接口流量控制。 + * 2.某些接口需要登录验证,但是不需要刷新token有效时间,如客户端轮询请求的接口。 + * 3.特定场景下IP黑、白名单。 + * 4.处于安全考虑的接口流量控制。 */ @Component public class AuthFilter implements GlobalFilter, Ordered { @@ -32,7 +32,7 @@ public class AuthFilter implements GlobalFilter, Ordered { private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); //过期时间设置为4小时 private final static long EXPIRE_TIME = Constants.TOKEN_EXPIRE * 60; - private final static long EXPIRE_TIME_APP =Constants.TOKEN_EXPIRE_APP * 60; + private final static long EXPIRE_TIME_APP = Constants.TOKEN_EXPIRE_APP * 60; // 排除过滤的 uri 地址,nacos自行添加 @Autowired @@ -44,14 +44,14 @@ public class AuthFilter implements GlobalFilter, Ordered { 键为用户ID,值为用户token,可以通过用户ID查询用户token,实现立刻失效用户token功能。 键为用户token,值为用户数据,实现token有效性,用户数据缓存功能。 */ - + @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String url = exchange.getRequest().getURI().getPath(); //1.uri白名单。 跳过不需要验证的路径 if (StringUtils.matches(url, ignoreWhite.getWhites())) { return chain.filter(exchange); - }else if(StringUtils.matchesTwo(url, ignoreWhite.getWhitesTwo())){ + } else if (StringUtils.matchesTwo(url, ignoreWhite.getWhitesTwo())) { return chain.filter(exchange); } //2.验证有无令牌。 从请求的header中获取token @@ -62,20 +62,18 @@ public class AuthFilter implements GlobalFilter, Ordered { //3.验证token是否有效。(a.验证token是否合法 b.验证token是否过期) //从redis缓存中获取key对应的内容 String userName = redisUtil.get(token); - + if (StringUtils.isBlank(userName)) { - + return setUnauthorizedResponse(exchange, "登录状态已过期"); } //验签:需要验证token中的签名是否与用户sid一致,后台用密钥+userSid+token除签名以外的内容,重新生成签名,与token中的签名进行比较 //刷新token过期日期 - if(token.contains("App")){ - //redisUtil.set(token, userName, EXPIRE_TIME_APP); - redisUtil.expire(token, EXPIRE_TIME_APP); - }else{ - //redisUtil.set(token, userName, EXPIRE_TIME); - redisUtil.expire(token, EXPIRE_TIME); + if (token.contains("App")) { + redisUtil.expire(token, EXPIRE_TIME_APP); + } else { + redisUtil.expire(token, EXPIRE_TIME); } // 在请求中增加用户信息 @@ -84,8 +82,10 @@ public class AuthFilter implements GlobalFilter, Ordered { ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); return chain.filter(mutableExchange); } + /** * 鉴权异常处理 + * * @param exchange * @param msg * @return @@ -99,7 +99,7 @@ public class AuthFilter implements GlobalFilter, Ordered { return response.writeWith(Mono.fromSupplier(() -> { DataBufferFactory bufferFactory = response.bufferFactory(); - return bufferFactory.wrap(JSON.toJSONBytes(R.fail(msg))); + return bufferFactory.wrap(JSON.toJSONBytes(ResultBean.fireFail().setMsg(msg))); })); } diff --git a/anrui-gateway/src/main/java/com/yxt/anrui/utils/HttpStatus.java b/anrui-gateway/src/main/java/com/yxt/anrui/utils/HttpStatus.java new file mode 100644 index 0000000000..3c466535f8 --- /dev/null +++ b/anrui-gateway/src/main/java/com/yxt/anrui/utils/HttpStatus.java @@ -0,0 +1,21 @@ +package com.yxt.anrui.utils; + +/** + * @author dimengzhe + * @date 2021/6/16 10:50 + * @description + */ + +public class HttpStatus { + + /** + * 操作成功 + */ + public static final int SUCCESS = 200; + + /** + * 系统内部错误 + */ + public static final int ERROR = 500; + +} diff --git a/anrui-gateway/src/main/java/com/yxt/anrui/utils/IResultCodeMsg.java b/anrui-gateway/src/main/java/com/yxt/anrui/utils/IResultCodeMsg.java new file mode 100644 index 0000000000..1e1890e44d --- /dev/null +++ b/anrui-gateway/src/main/java/com/yxt/anrui/utils/IResultCodeMsg.java @@ -0,0 +1,44 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.anrui.utils; + +/** + * Project: yxt-common
+ * File: IResultCodeMsg.java
+ * Class: com.yxt.common.core.result.IResultCodeMsg
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021/9/11 下午11:00
+ * + * @author popo + * @version 1.0 + * @since 1.0 + */ +public interface IResultCodeMsg { + String getCode(); + String getMsg(); +} diff --git a/anrui-gateway/src/main/java/com/yxt/anrui/utils/R.java b/anrui-gateway/src/main/java/com/yxt/anrui/utils/R.java deleted file mode 100644 index 3c638950bb..0000000000 --- a/anrui-gateway/src/main/java/com/yxt/anrui/utils/R.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.yxt.anrui.utils; - -import java.io.Serializable; - -/** - * @author dimengzhe - * @date 2020/12/2 10:07 - * @description - */ - -public class R implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 成功 - */ - public static final int SUCCESS = Constants.SUCCESS; - - /** - * 失败 - */ - public static final int FAIL = Constants.FAIL; - - private int code; - - private String msg; - private boolean success; - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - private T data; - - public static R ok() { - return restResult(null, SUCCESS, null, true); - } - - public static R ok(T data) { - return restResult(data, SUCCESS, null, true); - } - - public static R ok(T data, String msg) { - return restResult(data, SUCCESS, msg, true); - } - - public static R fail() { - return restResult(null, FAIL, null, false); - } - - public static R fail(String msg) { - return restResult(null, FAIL, msg, false); - } - - public static R fail(T data) { - return restResult(data, FAIL, null, false); - } - - public static R fail(T data, String msg) { - return restResult(data, FAIL, msg, false); - } - - public static R fail(int code, String msg) { - return restResult(null, code, msg, false); - } - - private static R restResult(T data, int code, String msg, boolean success) { - R apiResult = new R<>(); - apiResult.setCode(code); - apiResult.setData(data); - apiResult.setMsg(msg); - apiResult.setSuccess(success); - return apiResult; - } - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } -} diff --git a/anrui-gateway/src/main/java/com/yxt/anrui/utils/ResultBean.java b/anrui-gateway/src/main/java/com/yxt/anrui/utils/ResultBean.java new file mode 100644 index 0000000000..16bc5fc1df --- /dev/null +++ b/anrui-gateway/src/main/java/com/yxt/anrui/utils/ResultBean.java @@ -0,0 +1,191 @@ +package com.yxt.anrui.utils; + +import java.io.Serializable; + +/** + * Project: yxt-common-core
+ * File: ResultBean.java
+ * Class: com.yxt.common.core.result.ResultBean
+ * Description: 通过接口、Rest、逻辑处理执行后的结果信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2020/8/4 0:51
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +public class ResultBean implements Serializable { + private static final long serialVersionUID = 4529658978692424234L; + + private long timestamp = System.currentTimeMillis(); + + public long getTimestamp() { + return timestamp; + } + + // 是否成功 + private boolean success; + + // 消息 返回结果的说明 + private String msg; + + // 结果状态码 + private String code; + + // 数据 + private T data; + + private String message; + + public String getMessage() { + return message; + } + + public ResultBean setMessage(String message) { + this.message = message; + return this; + } + + public ResultBean() { + } + + public ResultBean(boolean success) { + this.success = success; + } + + public ResultBean(boolean success, String msg) { + this.success = success; + this.msg = msg; + } + + public ResultBean(boolean success, String msg, String code) { + this.success = success; + this.msg = msg; + this.code = code; + } + + public ResultBean(T data) { + this.success = true; + this.data = data; + } + + public ResultBean(String code, T data) { + this.success = true; + this.code = code; + this.data = data; + } + + public ResultBean(String code, String msg, T data) { + this.success = true; + this.code = code; + this.msg = msg; + this.data = data; + } + + public boolean getSuccess() { + return success; + } + + public ResultBean setSuccess(boolean success) { + this.success = success; + return this; + } + + public String getMsg() { + return msg; + } + + public ResultBean setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getCode() { + return code; + } + + public ResultBean setCode(String code) { + this.code = code; + return this; + } + + public T getData() { + return data; + } + + public ResultBean setData(T data) { + this.data = data; + return this; + } + + public ResultBean successOne() { + this.setSuccess(true); + this.setCode("0"); + this.setMessage("成功!"); + return this; + } + + public ResultBean failOne() { + this.setSuccess(false); + this.setCode(String.valueOf(HttpStatus.ERROR)); + this.setMessage("操作失败!"); + return this; + } + + public ResultBean success() { + this.setSuccess(true); + this.setCode(String.valueOf(HttpStatus.SUCCESS)); + this.setMsg("操作成功!"); + return this; + } + + public ResultBean fail() { + this.setSuccess(false); + this.setCode(String.valueOf(HttpStatus.ERROR)); + this.setMsg("操作失败!"); + return this; + } + + public static ResultBean fireSuccess() { + ResultBean rb = new ResultBean(); + rb.setSuccess(true); + rb.setCode(String.valueOf(HttpStatus.SUCCESS)); + rb.setMsg("操作成功!"); + return rb; + } + + public static ResultBean fireFail() { + ResultBean rb = new ResultBean(); + rb.setSuccess(false); + rb.setCode(String.valueOf(HttpStatus.ERROR)); + rb.setMsg("操作失败!"); + return rb; + } + + /** + * 设置返回code及msg + * + * @param codeMsg Code和Msg的枚举 + * @return + */ + public ResultBean setCode(IResultCodeMsg codeMsg) { + this.code = codeMsg.getCode(); + this.msg = codeMsg.getMsg(); + return this; + } + + /** + * 返回失败信息,并指定结果code + * + * @param codeMsg Code和Msg的枚举 + * @return + */ + public ResultBean fail(IResultCodeMsg codeMsg) { + this.setSuccess(false); + this.code = codeMsg.getCode(); + this.msg = codeMsg.getMsg(); + return this; + } + +}