利用Spring AOP自定义注解解决日志和签名校验 下载本文

内容发布更新时间 : 2024/6/26 9:17:43星期一 下面是文章的全部内容请认真阅读。

利用Spring AOP自定义注解解决日志和签名校验

一、需解决的问题部分API有签名参数(signature),

Passport首先对签名进行校验,校验通过才会执行实现方法。 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如:boolean isValid =

accountService.validSignature(appid, signature, client_signature); if (!isValid) return

ErrorUtil.buildError(ErrorUtil.ERR_CODE_COM_SING); 第二种实现方式(Spring Interception):利用spring的拦截器功能,对指定的接口进行拦截,拦截器实现签名校验算法,例如:<mvc:interceptors> <mvc:interceptor>

<mvc:mapping path=\/>

<mvc:mapping path=\ <mvc:mapping path=\/>

<mvc:mapping path=\ <bean

class=\dSecureInteceptor\ </mvc:interceptor>

</mvc:interceptors> 第三种实现方式(spring AOP):自定义注解,对需要进行签名验证的方法添加注解,例如:@SecureValid @ResponseBody

@RequestMapping(value = \RequestMethod.POST)

public Object addShare(HttpServletRequest req, HttpServletResponse res,InfoAPIRequestParams requestParams) { ...

} 2. 日志记录功能,例如:某些接口需要记录请求和响应,执行时间,类名,方法名等日志信息。也可采用以上三种方式实现。 3. 代码性能监控问题,例如方法调用时间、次数、线程和堆栈信息等。这类问题在后一个专题提出解决方案,采用以上三种方式实现缺点太多。以下是三种实现方式比较:实现方式优点缺点Origin不采用反射机制,性能最佳逻辑复杂时,代码复用不好需要在每个接口里写入相同代码(我太懒,就想写几个字母)Spring Inter非常适合对所有方法进行拦截,例如调试时打印所有方法执行时间类似过滤

器的功能,如日志处理、编码转换、权限检查是AOP的子功能不采用反射机制,性能有所影响需要在xml文件里配置对哪些接口进行拦截,比较麻烦Spring AOP使用方便,增加一个注解非常灵活,可@Before,@After,@Around等不采用反射机制,性能有所影响(性能对比后面详细展示)