请求接口返回数据加密Java

时间:2025-04-21 07:58:43
/** * 注释类型ControllerAdvice可参考以下网站 * /spring-framework/docs/4.3./javadoc-api/org/springframework/web/bind/annotation/ */ @ControllerAdvice public class RestControllerAdvice implements ResponseBodyAdvice<Object> { protected Logger logger = LoggerFactory.getLogger(getClass()); static String isOpen = "true";//是否开启加密 static String encryptionCode = "z4265826";//加密编码值 @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { URI uri = request.getURI(); String str = uri.getPath(); //这里可以写自己的业务逻辑值 //可以写对那些接口 进行加密 哪些接口不进行加密 //例如 我对 含有user的接口进行加密,并且用户登录的接口不进行加密, if (str.contains("user") && "true".equals(isOpen) && !str.contains("user/login")) { //可以进行自己的业务逻辑处理 String jsonstr = JSON.toJSONString(body, SerializerFeature.WriteNonStringKeyAsString, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue); if (!"null".equals(jsonstr)) { logger.debug("==> realdata: " + jsonstr); String jm = Base64.encode(jsonstr); //可以进行自己的业务逻辑处理 body= getNewString(jm); return body; } } return body; } /** * * @param str * @return */ private static String getNewString(String str) { //这里可以写自己的业务逻辑 String code = encryptionCode; //颠倒字符串 StringBuilder s = new StringBuilder(str).reverse(); //追加特殊字符串 s = s.append(Base64.encode(code)); return s.toString(); } /** * 返回结果解密 * * @param code * @param str * @return */ private static String getDecodeInfo(String code, String str) { String jmstr = Base64.encode(code); str = str.substring(0, (str.length() - (jmstr.length()))); StringBuilder ns = new StringBuilder(str).reverse(); String s1 = new String(Base64.decode(ns)); return s1; } // public static void main(String[] args) { // String str="无敌可爱美少女,哈哈哈哈哈哈~~~~我是z4265826"; // String jm = (str); // ("==> 加密后的字符串: " +getNewString(jm)); // } public static void main(String[] args) { String code = encryptionCode; String str = "\"2IDO1YjM0o3rYaekIauf+5nfIOZ5IOZ5IOZ5IOZ5IOZ5IOZ5My77zWa5RCb5O675xi45v+Y5MWp5gep5ejQyNjU4MjY="; System.out.println("==> 解密后的字符串: " +getDecodeInfo(code, str)); } }