JWT,过滤器拦截器,全局异常处理,事务处理,AOP合集

理论总是枯燥的,更多的是要尝试自己去理解,把代码敲出来
jwt:编写工具类设置头,载荷和过期时间,登录成功后生成一个JWT令牌进行比对
比对成功则放行
失败则抛出错误信息


 Filter有3个阶段,分别是初始化,拦截和过滤,销毁。

初始化阶段:当服务器启动时,我们的服务器(Tomcat)就会读取配置文件,扫描注解,然后来创建我们的Filter。
拦截和过滤阶段:只要请求资源的路径和拦截的路径相同,那么过滤器就会对请求进行过滤,这个阶段在服务器运行过程中会一直循环。
销毁阶段:当服务器(Tomcat)关闭时,服务器创建的Filter也会随之销毁。


Filter拦截路径:@WebFilter(urlPatterns="/*"
拦截具体路径  /login      只有访问/login路径时,才会被拦截
目录拦截     /emps/*(不一定非得是emps,输入任何路径都能执行拦截)    访问/emps/*下的所有资源,都会拦截
拦截所有    /*                  访问所有资源,都会被拦截

过滤器链:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链
先执行类名靠前的放行前逻辑,然后放行,再执行靠后的过滤器逻辑再放行,当请求到达web资源之后返回来先执行类名靠后的放行后逻辑,再执行靠前的放行后逻辑

登录校验:流程
获取请求url
判断请求url中是否包含login,如果包含,说明是登陆操作,放行
获取请求头中的令牌(token)
判断令牌是否存在,如果不存在,返回错误结果(未登录)
解析token令牌,如果解析失败,返回错误结果(未登录)
放行

Interceptor拦截器
拦截器概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行
作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码

拦截路径             含义                                                  举例
/*                     一级路径          能匹配/depts,/emps,不能匹配/depts/1
/**                  任意级路径        能匹配/depts,/depts/1也就是任意一级路径
/depts/*         可以匹配/depts的下一级路径             能匹配/depts/1,不能匹配/depts/1/2,不能匹配/depts
/depts/**        /depts的任意级路径                              能匹配/depts/1/2,不能匹配/emps/1

过滤器和拦截器的区别
接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口。
拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截spring中的资源


全局异常处理器
编写一个类,在类名上添加@RestControllerAdvice,在方法名上添加@ExceptionHandler注解,并填写Exception.class,
编写ex.pringStackTrace方法即可捕获全局异常

Spring事务管理
spring中的事务应该保持一致性,要么全部成功,要么全部回滚
@Transactional注解,添加到service层的类上,方法上,接口上(一般情况都是加在执行增删改的方法上) 
作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务
同时可以在配置文件中添加spring的事务管理日志
事务属性-传播行为
REQUIRED:大部分情况下都是用该传播行为即可。
REQUIRES_NEW:当我们不希望事务之间互相影响时,可以使用该传播行为。比如:下订单前需要记录日志,不论订单保存成功与否,都需要保证日志记录能够记录成功。

AOP:Aspect Oriented Programming(面向切面编程,面向方面编程),其实就是面向特定方法编程。在不改动原始方法的情况下进行编程,也是一种编程思想,
他允许开发者将横切关注点(如日志记录,事务管理)等从业务逻辑分离,提高代码的模块化和可维护性
核心概念:
连接点:joinpoint可以被AOP控制的方法(暗含方法执行时的相关信息)
通知:advice,指那些重复的逻辑,也就是共性功能(最终体现为一个方法)
切入点:PointCut,匹配连接点的条件,通知仅会在切入点方法执行时被应用
切面:aspect,描述通知与切入点的对应关系(通知+切入点)
目标对象:Target,通知    所应用的对象
    
执行顺序
1.
不同切面类中,默认按照切面类的类名字母排序
目标方法前的通知方法:字母排名靠前的先执行
目标方法后的通知方法:字母排名靠前的后执行
2.用@order(数字)加在切面类上来控制顺序
目标方法前的通知方法:数字小的先执行
目标方法后的通知方法:数字小的后执行

AOP切面表达式两种方法
1.execution(修饰符?返回值 包名.类名?方法名(参数)throws 异常?)
2.@annotation(注解全类名)
第一种方法在类名开头一致时使用,建议同类型方法开头一致,如查找方法都以find开头,修改都以update开头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值