Commit 7a4b71c8 authored by zhouxudong's avatar zhouxudong

反扒加密

parent f54f22fc
...@@ -8,7 +8,7 @@ import java.lang.annotation.Target; ...@@ -8,7 +8,7 @@ import java.lang.annotation.Target;
* @Author:zhouxudong * @Author:zhouxudong
* @version: 1.0 * @version: 1.0
* @Date: 2023/12/12 9:40 * @Date: 2023/12/12 9:40
* @Description: 解密注解 * @Description: 给app的解密注解
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
......
...@@ -9,7 +9,7 @@ import java.lang.annotation.Target; ...@@ -9,7 +9,7 @@ import java.lang.annotation.Target;
* @Author:zhouxudong * @Author:zhouxudong
* @version: 1.0 * @version: 1.0
* @Date: 2023/12/12 9:40 * @Date: 2023/12/12 9:40
* @Description: 加密注解 * @Description: 给app的加密注解
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
......
package com.lyy.admin.common.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Author:zhouxudong
* @version: 1.0
* @Date: 2023/12/12 9:40
* @Description: 前后端交互加密注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptBusiness {
}
...@@ -115,6 +115,8 @@ public class Constants { ...@@ -115,6 +115,8 @@ public class Constants {
//短信过期时间 //短信过期时间
public static final int EXPIRE_TIME =5; public static final int EXPIRE_TIME =5;
//请求头前端存放的密钥 返回值加密使用
public static final String secure = "secure";
//秒 //秒
public static final int INTERVAL_TIME =4*60; public static final int INTERVAL_TIME =4*60;
//#短信时间间隔(每天限制次数) 单位 天 //#短信时间间隔(每天限制次数) 单位 天
......
package com.lyy.admin.common.encrypt;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.json.JSONUtil;
import com.lyy.admin.common.anno.EncryptBusiness;
import com.lyy.admin.common.constant.Constants;
import com.lyy.admin.common.utils.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.nio.charset.StandardCharsets;
/**
* @Author:zhouxudong
*
* @version: 1.0 @Date: 2023/12/12 10:07 @Description: 前后端加密统一处理
*/
@ControllerAdvice
@Slf4j
public class EncrptBusinessResponse implements ResponseBodyAdvice<Object> {
@Value("${sign.privateKey}")
private String privateKey;
/** 支持什么时候加密 */
@Override
public boolean supports(
MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return methodParameter.hasMethodAnnotation(EncryptBusiness.class);
}
/** 数据响应进行加密 */
@Override
public Object beforeBodyWrite(
Object result,
MethodParameter methodParameter,
MediaType mediaType,
Class<? extends HttpMessageConverter<?>> aClass,
ServerHttpRequest serverHttpRequest,
ServerHttpResponse serverHttpResponse) {
//AjaxResult value = AjaxResult.success(result);
log.info("result:{}", result);
if(ObjectUtils.isEmpty(result)){
return AjaxResult.success("操作成功");
}
RSA rsa = new RSA(privateKey, null);
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) serverHttpRequest;
//获取签名
String sign = servletRequest.getServletRequest().getHeader(Constants.secure);
//获取对称加密的key
String decrypt = rsa.decryptStr(sign, KeyType.PrivateKey);
// 获取key的字节
AES aes = new AES("CBC","PKCS7Padding", decrypt.getBytes(),decrypt.getBytes(StandardCharsets.UTF_8));
boolean isStringResult = methodParameter.getParameterType().equals(String.class);
if (isStringResult) {
return JSONUtil.toJsonStr(AjaxResult.success("操作成功",aes.encryptBase64(result.toString())));
}
// 如果msg和data存在的话,则进行加密,最后进行返回
return AjaxResult.success("操作成功",aes.encryptBase64(JSONUtil.toJsonStr(result)));
}
}
...@@ -23,7 +23,7 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; ...@@ -23,7 +23,7 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/** /**
* @Author:zhouxudong * @Author:zhouxudong
* *
* @version: 1.0 @Date: 2023/12/12 10:07 @Description: * @version: 1.0 @Date: 2023/12/12 10:07 @Description: 给app用的
*/ */
@ControllerAdvice @ControllerAdvice
@Slf4j @Slf4j
......
...@@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil; ...@@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.lyy.admin.common.anno.Encrypt; import com.lyy.admin.common.anno.Encrypt;
import com.lyy.admin.common.anno.EncryptBusiness;
import com.lyy.admin.common.exception.APIException; import com.lyy.admin.common.exception.APIException;
import com.lyy.admin.common.exception.LiyerenException; import com.lyy.admin.common.exception.LiyerenException;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -41,7 +42,8 @@ public class GlobalExceptionHandler implements ResponseBodyAdvice { ...@@ -41,7 +42,8 @@ public class GlobalExceptionHandler implements ResponseBodyAdvice {
public boolean supports(MethodParameter returnType, Class converterType) { public boolean supports(MethodParameter returnType, Class converterType) {
boolean assignableFrom = returnType.getParameterType().isAssignableFrom(AjaxResult.class); boolean assignableFrom = returnType.getParameterType().isAssignableFrom(AjaxResult.class);
boolean Encrypt = returnType.hasMethodAnnotation(Encrypt.class); boolean Encrypt = returnType.hasMethodAnnotation(Encrypt.class);
return !assignableFrom&&!Encrypt; boolean encryptBusiness = returnType.hasMethodAnnotation(EncryptBusiness.class);
return !assignableFrom&&!Encrypt&&!encryptBusiness;
} }
@Override @Override
......
...@@ -5,6 +5,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; ...@@ -5,6 +5,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.lyy.admin.VO.DevelopmentInfoAllSaveVO; import com.lyy.admin.VO.DevelopmentInfoAllSaveVO;
import com.lyy.admin.VO.ParkInfoAllSaveVO; import com.lyy.admin.VO.ParkInfoAllSaveVO;
import com.lyy.admin.common.anno.Cache; import com.lyy.admin.common.anno.Cache;
import com.lyy.admin.common.anno.EncryptBusiness;
import com.lyy.admin.common.exception.APIException; import com.lyy.admin.common.exception.APIException;
import com.lyy.admin.common.page.TableDataInfo; import com.lyy.admin.common.page.TableDataInfo;
import com.lyy.admin.common.utils.PageUtils; import com.lyy.admin.common.utils.PageUtils;
...@@ -46,6 +47,7 @@ public class DevelopmentInfoController extends BaseController { ...@@ -46,6 +47,7 @@ public class DevelopmentInfoController extends BaseController {
@ApiImplicitParam(name = "orderByColumn", value = "排序字段(可为空,传类属性)", type = "String"), @ApiImplicitParam(name = "orderByColumn", value = "排序字段(可为空,传类属性)", type = "String"),
@ApiImplicitParam(name = "isAsc", value = "排序字段(可为空,请传asc或者desc)", type = "String") @ApiImplicitParam(name = "isAsc", value = "排序字段(可为空,请传asc或者desc)", type = "String")
}) })
@EncryptBusiness
public TableDataInfo list(DevelopmentInfoParam developmentInfoParam) { public TableDataInfo list(DevelopmentInfoParam developmentInfoParam) {
boolean login = isLogin(); boolean login = isLogin();
String status = DevelopmentStatusEnum.STATUS_YRZ.getCode()+","+DevelopmentStatusEnum.STATUS_DRZ.getCode(); String status = DevelopmentStatusEnum.STATUS_YRZ.getCode()+","+DevelopmentStatusEnum.STATUS_DRZ.getCode();
...@@ -71,6 +73,7 @@ public class DevelopmentInfoController extends BaseController { ...@@ -71,6 +73,7 @@ public class DevelopmentInfoController extends BaseController {
@ResponseBody @ResponseBody
@ApiOperation(value = "某个开发区信息",notes = "rest风格传参,将参数拼接在url上") @ApiOperation(value = "某个开发区信息",notes = "rest风格传参,将参数拼接在url上")
@ApiImplicitParam(name = "id", value = "开发区id", type = "Long") @ApiImplicitParam(name = "id", value = "开发区id", type = "Long")
@EncryptBusiness
public DevelopmentInfoAllVO get(@PathVariable Long id) { public DevelopmentInfoAllVO get(@PathVariable Long id) {
return developmentInfoSerivce.getDevelopmentInfo(id,getUserInfo().getUserId(),getUserInfo().getIsMembership()); return developmentInfoSerivce.getDevelopmentInfo(id,getUserInfo().getUserId(),getUserInfo().getIsMembership());
} }
......
...@@ -7,6 +7,7 @@ import com.lyy.admin.VO.ParkInfoAllSaveVO; ...@@ -7,6 +7,7 @@ import com.lyy.admin.VO.ParkInfoAllSaveVO;
import com.lyy.admin.VO.ParkInfoAllVO; import com.lyy.admin.VO.ParkInfoAllVO;
import com.lyy.admin.VO.ParkInfoListVO; import com.lyy.admin.VO.ParkInfoListVO;
import com.lyy.admin.common.anno.Cache; import com.lyy.admin.common.anno.Cache;
import com.lyy.admin.common.anno.EncryptBusiness;
import com.lyy.admin.common.page.TableDataInfo; import com.lyy.admin.common.page.TableDataInfo;
import com.lyy.admin.common.utils.PageUtils; import com.lyy.admin.common.utils.PageUtils;
import com.lyy.admin.controller.BaseController; import com.lyy.admin.controller.BaseController;
...@@ -56,6 +57,7 @@ public class ParkInfoController extends BaseController { ...@@ -56,6 +57,7 @@ public class ParkInfoController extends BaseController {
@ApiImplicitParam(name = "orderByColumn", value = "排序字段(可为空,传类属性)", type = "String"), @ApiImplicitParam(name = "orderByColumn", value = "排序字段(可为空,传类属性)", type = "String"),
@ApiImplicitParam(name = "isAsc", value = "排序字段(可为空,请传asc或者desc)", type = "String") @ApiImplicitParam(name = "isAsc", value = "排序字段(可为空,请传asc或者desc)", type = "String")
}) })
@EncryptBusiness
public TableDataInfo list(ParkInfoParam parkInfoParam) { public TableDataInfo list(ParkInfoParam parkInfoParam) {
boolean login = isLogin(); boolean login = isLogin();
String status = ParkInfoEnum.STATUS_YRZ.getCode()+","+ParkInfoEnum.STATUS_DRZ.getCode(); String status = ParkInfoEnum.STATUS_YRZ.getCode()+","+ParkInfoEnum.STATUS_DRZ.getCode();
...@@ -85,6 +87,7 @@ public class ParkInfoController extends BaseController { ...@@ -85,6 +87,7 @@ public class ParkInfoController extends BaseController {
@ResponseBody @ResponseBody
@ApiOperation(value = "获取某个园区信息", notes = "rest风格传参,将参数拼接在url上") @ApiOperation(value = "获取某个园区信息", notes = "rest风格传参,将参数拼接在url上")
@ApiImplicitParam(name = "id", value = "园区id", type = "Long") @ApiImplicitParam(name = "id", value = "园区id", type = "Long")
@EncryptBusiness
public ParkInfoAllVO get(@PathVariable Long id) { public ParkInfoAllVO get(@PathVariable Long id) {
return parkInfoService.getParkInfo(id, getUserInfo().getUserId(), getUserInfo().getIsMembership()); return parkInfoService.getParkInfo(id, getUserInfo().getUserId(), getUserInfo().getIsMembership());
} }
......
...@@ -108,7 +108,7 @@ anti: ...@@ -108,7 +108,7 @@ anti:
reptile: reptile:
manager: manager:
#是否启用反爬虫插件 #是否启用反爬虫插件
enabled: false enabled: true
#局部拦截时,需要反爬的接口列表,以','分隔,支持正则匹配。全局拦截模式下无需配置 #局部拦截时,需要反爬的接口列表,以','分隔,支持正则匹配。全局拦截模式下无需配置
include-urls: ^${server.servlet.context-path}/.*$ include-urls: ^${server.servlet.context-path}/.*$
#是否启用 IP Rule #是否启用 IP Rule
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment