请求接口返回数据加密Java
/**
* 注释类型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));
}
}