springaspect配合自定义注解实现接口token校验
在项目开发中,通常对所有的接口都需要做接口token校验,为了保证代码简洁,可以使用springaspect加自定义注解方式进行token校验,具体的实现方式如下:
一。新增自定义注解SessionValidTarget(ElementType。METHOD)Retention(RetentionPolicy。RUNTIME)DocumentedInheritedpublicinterfaceSessionValid{}
二。新增aspect切面新增自定义注解切点Pointcut(annotation(com。zsl。web。config。SessionValid))publicvoidsessionValid(){}AutowiredprivateUserDataConfiguserDataConfig;方法执行前进行token校验Before(sessionValid())publicvoidbefore(JoinPointjoinPoint)throwsThrowable{LOG。info(开始进行token验证);Object〔〕argsjoinPoint。getArgs();for(Objectarg:args){if(argnullarginstanceofHttpServletResponse){continue;}elseif(arginstanceofHttpServletRequest){ServletRequestAttributesattributes(ServletRequestAttributes)RequestContextHolder。getRequestAttributes();HttpServletRequestrequestattributes。getRequest();Stringtokenrequest。getHeader(Constants。TOKEN);LOG。info(tokentoken);if(StringUtils。isEmpty(token)){thrownewSessionExpireException(未授权);}ClaimsclaimsuserDataConfig。parseUserToken(token);if(claims。isEmpty()){thrownewSessionExpireException(未授权);}System。out。println(idclaims。getId());continue;}}}
三。在需要校验的方法上加入注解SessionValid
测试结果:
说明token校验已经生效。
springaspect不仅可以用在验证token,也可以用在日志收集,接口重复请求判断等多个应用场景。