Browse Source

网关迁移状态

zhanglei
dimengzhe 3 years ago
parent
commit
d6cfe058a8
  1. 30
      anrui-gateway/src/main/java/com/yxt/anrui/AuthFilter.java
  2. 21
      anrui-gateway/src/main/java/com/yxt/anrui/utils/HttpStatus.java
  3. 44
      anrui-gateway/src/main/java/com/yxt/anrui/utils/IResultCodeMsg.java
  4. 104
      anrui-gateway/src/main/java/com/yxt/anrui/utils/R.java
  5. 191
      anrui-gateway/src/main/java/com/yxt/anrui/utils/ResultBean.java

30
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<Void> 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)));
}));
}

21
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;
}

44
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 <br/>
* File: IResultCodeMsg.java <br/>
* Class: com.yxt.common.core.result.IResultCodeMsg <br/>
* Description: <描述类的功能>. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2021/9/11 下午11:00 <br/>
*
* @author popo
* @version 1.0
* @since 1.0
*/
public interface IResultCodeMsg {
String getCode();
String getMsg();
}

104
anrui-gateway/src/main/java/com/yxt/anrui/utils/R.java

@ -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<T> 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 <T> R<T> ok() {
return restResult(null, SUCCESS, null, true);
}
public static <T> R<T> ok(T data) {
return restResult(data, SUCCESS, null, true);
}
public static <T> R<T> ok(T data, String msg) {
return restResult(data, SUCCESS, msg, true);
}
public static <T> R<T> fail() {
return restResult(null, FAIL, null, false);
}
public static <T> R<T> fail(String msg) {
return restResult(null, FAIL, msg, false);
}
public static <T> R<T> fail(T data) {
return restResult(data, FAIL, null, false);
}
public static <T> R<T> fail(T data, String msg) {
return restResult(data, FAIL, msg, false);
}
public static <T> R<T> fail(int code, String msg) {
return restResult(null, code, msg, false);
}
private static <T> R<T> restResult(T data, int code, String msg, boolean success) {
R<T> 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;
}
}

191
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 <br/>
* File: ResultBean.java <br/>
* Class: com.yxt.common.core.result.ResultBean <br/>
* Description: 通过接口Rest逻辑处理执行后的结果信息. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2020/8/4 0:51 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
public class ResultBean<T> 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<T> 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<T> setSuccess(boolean success) {
this.success = success;
return this;
}
public String getMsg() {
return msg;
}
public ResultBean<T> setMsg(String msg) {
this.msg = msg;
return this;
}
public String getCode() {
return code;
}
public ResultBean<T> setCode(String code) {
this.code = code;
return this;
}
public T getData() {
return data;
}
public ResultBean<T> setData(T data) {
this.data = data;
return this;
}
public ResultBean<T> successOne() {
this.setSuccess(true);
this.setCode("0");
this.setMessage("成功!");
return this;
}
public ResultBean<T> failOne() {
this.setSuccess(false);
this.setCode(String.valueOf(HttpStatus.ERROR));
this.setMessage("操作失败!");
return this;
}
public ResultBean<T> success() {
this.setSuccess(true);
this.setCode(String.valueOf(HttpStatus.SUCCESS));
this.setMsg("操作成功!");
return this;
}
public ResultBean<T> fail() {
this.setSuccess(false);
this.setCode(String.valueOf(HttpStatus.ERROR));
this.setMsg("操作失败!");
return this;
}
public static <T> ResultBean<T> fireSuccess() {
ResultBean<T> rb = new ResultBean<T>();
rb.setSuccess(true);
rb.setCode(String.valueOf(HttpStatus.SUCCESS));
rb.setMsg("操作成功!");
return rb;
}
public static <T> ResultBean<T> fireFail() {
ResultBean<T> rb = new ResultBean<T>();
rb.setSuccess(false);
rb.setCode(String.valueOf(HttpStatus.ERROR));
rb.setMsg("操作失败!");
return rb;
}
/**
* 设置返回code及msg
*
* @param codeMsg Code和Msg的枚举
* @return
*/
public ResultBean<T> setCode(IResultCodeMsg codeMsg) {
this.code = codeMsg.getCode();
this.msg = codeMsg.getMsg();
return this;
}
/**
* 返回失败信息并指定结果code
*
* @param codeMsg Code和Msg的枚举
* @return
*/
public ResultBean<T> fail(IResultCodeMsg codeMsg) {
this.setSuccess(false);
this.code = codeMsg.getCode();
this.msg = codeMsg.getMsg();
return this;
}
}
Loading…
Cancel
Save