简单的加密数据自动解码

对传入加密参数的自动解密,业务里面用得不多,只有密码传输时用了下加解密,仅限字符串参数。有类似需求的可以参考扩展,核心是实现SpringMVC的HandlerMethodArgumentResolver 扩展类

加解密参数处理类:

public class EncrypMethodArgHandler implements HandlerMethodArgumentResolver {

	@Override
	public boolean supportsParameter(MethodParameter parameter) {
	//处理带Encrypt注解的参数
		return null != parameter.getParameterAnnotation(Encrypt.class);
	}

	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
	//解下密返回就完事了
		return encryptParamValue(webRequest, parameter.getParameterName());
	}

	privateString encryptParamValue(NativeWebRequest webRequest, String parameterName) {
		String value = webRequest.getParameter(parameterName);
		if (isNotNull(value)) {
			value = decrypt(parameterName, value);
		}
		return value;
	}

	privateString decrypt(String parameterName, String value) {
		try {
			value = UtilCrypt.decryptAES(value);
		} catch (Exception e) {
			throw new LocalException("参数" + parameterName + "解码失败");
		}
		return value;
	}
}

Encrypt 注解:

@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Encrypt {

	String[] value() default {};
	
	//可以扩展指定加解密方式
}

注册加密类

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
		resolvers.add(new EncrypMethodArgHandler());
	}
}

实际使用:

	@RequestMapping("/edit/password")
	@SystemLog(" 修改密码")
	public JsonResult editPassword(String userId, @Encrypt String password) throws Exception {
		return service.editPassword(userId, password);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值