当前位置: 首页 > news >正文

Day51(21)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\springboot-aop-quickstart

登录认证--拦截器Interceptor

image-20251130121926875

image-20251130122048923

image-20251130122152150

image-20251130124432636

令牌校验

image-20251130130810791

image-20251130131338342

image-20251130132229085

package com.itheima.Interceptor;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;@Slf4j
@Component
public class DemoIntercepter implements HandlerInterceptor {//目标资源方法运行之前运行,true放行,false不放行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("prehandle...");return true;}//目标资源方法运行之前运行,true放行,false不放行@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {log.info("postHandle...");}//视图渲染完毕之后运行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("afterCompletion...");}
}
package com.itheima.Interceptor;import com.itheima.utils.JwtUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;/*** 令牌校验的拦截器*/
@Slf4j
@Component
public class TokenInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1.获取请求路径String requestURI = request.getRequestURI();//2.判断是否是login
//        if (requestURI.contains("/login")){
//            log.info("登录请求");
//            return true;
//        }//3.获取请求头中的tokenString token = request.getHeader("token");//4.判断token是否存在if (token==null||token.isEmpty()){log.info("令牌为空,响应401");response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}//5.校验try {JwtUtils.parseToken(token);} catch (Exception e) {log.info("令牌非法,响应401");response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}return true;}
}
package com.itheima.config;import com.itheima.Interceptor.DemoIntercepter;
import com.itheima.Interceptor.TokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 配置类,底层封装了@component*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
//    @Autowired
//    private DemoIntercepter demoIntercepter;@Autowiredprivate TokenInterceptor tokenInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")//拦截所有请求.excludePathPatterns("/login");//不拦截什么请求}
}

AOP

image-20251130133135004

image-20251130133116518

image-20251130133558160

package com.itheima.aop;import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Slf4j
@Aspect//标识当前不是一个普通类,是AOP类
@Component
public class RecordTimeAspect {@Around("execution(* com.itheima.service.impl.*.*(..))")public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {//1.记录方法运行的开始时间long begin = System.currentTimeMillis();//2.执行原始的方法Object result = pjp.proceed();//3.记录方法运行的结束时间,记录耗时long end = System.currentTimeMillis();log.info("方法{}执行耗时:{}ms",pjp.getSignature(), end-begin);return result;}
}

image-20251130135602691

切入点一定是连接点,连接点不一定是接入点

image-20251130174428787

image-20251130174841492

实际调用的是代理对象的方法

image-20251130175728362

image-20251130180155723

package com.itheima.aop;import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;@Slf4j
@Aspect
@Component
public class MyAspect1 {@Pointcut("execution(* com.itheima.service.impl.*.*(..))")private void pt(){}//before是前置通知-目标方法运行之前@Before("pt()")public void before(){log.info("before...");}//环绕通知-目标方法执行之前和运行之后@Around("pt()")public Object around(ProceedingJoinPoint pjp) throws Throwable {log.info("around-before");Object proceed = pjp.proceed();log.info("around-after");return proceed;}//after是后置通知-目标方法运行之后@After("pt()")public void after(){log.info("after...");}//afterReturning是后置通知-目标方法运行之后,出现异常不会运行@AfterReturning("pt()")public void afterReturning(){log.info("afterReturning...");}//afterThrowing是后置通知-目标方法运行之后,出现异常才会运行@AfterThrowing("pt()")public void afterThrowing(){log.info("afterThrowing...");}
}

image-20251130183016742

image-20251130190924194

image-20251130191452584

image-20251130191858474

image-20251130193832284

package com.itheima.aop;import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;@Slf4j
@Component
@Order(2)
@Aspect
public class MyAspect5 {//前置通知
//    @Before("execution(public void com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))")//包名.类名,强烈不建议省略
//    @Before("execution( void com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))")//包名.类名,强烈不建议省略
//    @Before("execution( void delete(java.lang.Integer))")//包名.类名,强烈不建议省略//@Before("execution(* com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))")//包名.类名,强烈不建议省略//@Before("execution(* com.*.service.impl.DeptServiceImpl.delete(java.lang.Integer))")//包名.类名,强烈不建议省略//@Before("execution(* com.*.service.impl.*.*(java.lang.Integer))")//包名.类名,强烈不建议省略//@Before("execution(* com.*.service.impl.*.*(*))")//包名.类名,强烈不建议省略//@Before("execution(* com.*.service.impl.DeptServiceImpl.del*(java.lang.Integer))")//包名.类名,强烈不建议省略//@Before("execution(* com.itheima.service.impl.*.*e(*))")//包名.类名,强烈不建议省略//@Before("execution(* com..service.impl.DeptServiceImpl.*(..))")//包名.类名,强烈不建议省略//@Before("execution(* com.itheima.service.*.*(..))")//基于接口,所有的接口或者是类中的所有方法//匹配List与delete方法@Before("execution(* com.itheima.service.impl.DeptServiceImpl.list(..))||" +"execution(* com.itheima.service.impl.DeptServiceImpl.delete(..))")public void before(){log.info("MyAspect4 -> before ...");}}

image-20251130194029532

image-20251130194513652

@Before("@annotation(com.itheima.anno.LogOperation)")
public void before(){log.info("MyAspect4 -> before ...");
}
package com.itheima.anno;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogOperation {
}
http://www.jsqmd.com/news/56305/

相关文章:

  • 2025/11/27 今天学了string
  • 2025/11/30 今天没有自我学习
  • 完整教程:CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
  • 初三 whk 记
  • 成膜助剂代理商有哪些?2025年成膜助剂OEM企业推荐:TOP10名单精选
  • 软件基础第三次作业这个作业属于哪个课程
  • set操作
  • RISC-V Linux QEMU编译安装 qemu-system-riscv64 构建
  • 2025 补水嫩肤 + 水润双效沐浴露排行榜 TOP10,梵玢成沐浴首选!
  • 云南旅游,旅行社怎么选?看这份五大品牌榜就够了,权威数据+正规资质+定制服务+旅客口碑推荐
  • 孩子近视了,OK镜怎么选?9款热门型号对比
  • python自动化测试:pytest(一).md
  • 2025东华大学程序设计萌新挑战赛题解
  • python自动化测试:pytest(二)
  • 2025年必备口语练习APP清单:AI助学、真人对练,总有一款适合你
  • 详细介绍:2v1带您实战12nm高级数字后端
  • 服务器常见操作
  • CV论文速递: 覆盖医学影像分析、视频理解与生成、3D场景理解与定位等方向! (10.27-10.31) - 指南
  • 成膜助剂出口厂商有哪些?销量比较好的成膜助剂厂家名单权威推荐:资质供应商与外贸公司名录
  • 过碳酸钠代理商有哪些?全球过碳酸钠供应商推荐:有出口资质的过碳酸钠供应商
  • 过碳酸钠进口 CIF 价格 全球供应商及国内优质代理商名录:TOP榜单解析
  • D-Hub智慧标书--智能应答体系:智能体时代,技术标就该“点对点”应答!
  • 全弹性锂离子电池技术突破,可拉伸5000%
  • 成膜助剂源头工厂在哪里?成模性好的成膜助剂厂家哪家好?TOP前10质量优厂家推荐清单
  • HTTP/2协议漏洞解析:通过HEADERS帧填充实现拒绝服务攻击
  • 哪家过碳酸钠供应商产品质量好?欧盟标准过碳酸钠厂家:销量与质量双优品牌推荐
  • 成膜助剂生产厂家哪家好?高端成膜助剂直销厂家名录TOP榜单前十权威名单,技术领先企业汇总
  • 实用指南:JWT 全面解析与 Spring Boot 实战教程
  • 百度亮相 SREcon25:搜索稳定背后的秘密,微服务雪崩故障防范 - 指南
  • Attention is all you need论文学习