您的位置:首页 > 财经 > 产业 > 全国企业信用信息公示系统黑龙江_青岛官网seo价格_网络推广员一个月多少钱_cctv 13新闻频道

全国企业信用信息公示系统黑龙江_青岛官网seo价格_网络推广员一个月多少钱_cctv 13新闻频道

2024/11/18 10:49:26 来源:https://blog.csdn.net/qq_21004057/article/details/142598847  浏览:    关键词:全国企业信用信息公示系统黑龙江_青岛官网seo价格_网络推广员一个月多少钱_cctv 13新闻频道
全国企业信用信息公示系统黑龙江_青岛官网seo价格_网络推广员一个月多少钱_cctv 13新闻频道

这节记录下如何使用aop或者使用interceptor实现用户请求的是否带token,本文只是简单检查用户请求是否带参数token,并不对token的正确性进行验证。通常要从后台缓存中进行token校验。

第一种方式:拦截器方式

第一步:新建一个拦截器package,名称为interceptor,新建一个拦截器。

@Component
public class TokenInterceptor implements HandlerInterceptor {Logger logger = LoggerFactory.getLogger(TokenInterceptor.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {logger.info("preHandle执行中");String token  = request.getHeader("token");if(StringUtils.isBlank(token)){throw new BussinessException("无token,参数错误");}if(!token.equals("ceshi")){throw new BussinessException("token参数错误");};return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {logger.info("postHandle执行中");HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {logger.info("afterCompletion执行中");HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}

第二步:在WebMvcConfigurer配置类中注册拦截器

@Overridepublic void addInterceptors(InterceptorRegistry registry) {WebMvcConfigurer.super.addInterceptors(registry);registry.addInterceptor(tokenInterceptor);//默认所有的url拦截}

第二种方式:使用AOP

编写一个aop类,添加上注解@Aspect和@Component。重写下面的方法

@Aspect
@Component
public class LoggerAspect {private static final Logger logger = LoggerFactory.getLogger(LoggerAspect.class);@Pointcut("execution(* cn.wcyf.wcai.controller.front.*.*(..))") // 定义切点public void pointcut() {}@Before("pointcut()")public void before() {logger.info("before方法中: ");}@After("pointcut()")public void after() {logger.info("after方法中: " );}@AfterReturning("pointcut()")public void afterReturn() {logger.info("AfterReturning方法中: " );}@AfterThrowing("pointcut()")public void threw() {logger.info("AfterThrowing方法中: " );}@Around("pointcut()")public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {logger.info("Around方法开始: " + proceedingJoinPoint.getSignature());try {ServletRequestAttributes attrs  = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if(attrs!=null){HttpServletRequest request =  attrs.getRequest();String token = request.getHeader("token");if(StringUtils.isBlank(token)){throw new BussinessException("参数错误,token为空");}if(!token.equals("ceshi")){throw new BussinessException("token错误,这是aop测试");}}Object result = proceedingJoinPoint.proceed(); // 调用目标方法logger.info("Around方法结束: " + proceedingJoinPoint.getSignature() + ", 返回值: " + result);return result;} catch (Throwable ex) {logger.info("Around方法捕获异常: " + proceedingJoinPoint.getSignature() + ", 异常: " + ex.getMessage());throw ex; // 重新抛出异常,以便Spring可以正确处理}}
}

Object result = proceedingJoinPoint.proceed(); // 调用目标方法

这个代码可以执行调用目标方法,在这段代码前面可以实现前置通知,在这段代码后可以实现后置通知。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com