统⼀⽤户登录权限验证
1、最初的用户登录效验:在每个方法里面获取session和 session 中的用户信息,如果存在用户,那么就认为登录成功了,否则就登录失败了。
2、第二版用户登录效验:提供了统一的方法,在每个需要验证的方法中调用统一的用户登录身份效验方法来判断。
3、第三版用户登录效验:使用Spring AOP来使用统一的用户登录效验。遇到了问题:
a)没有办法得到HttpSession和 Request 对象。
b)实际拦截规则很复杂,使用简单Aspect j表达式无法满足拦截的需求。
4、第四版用户登录效验:Spring拦截器来实现用户的统一登录验证。
a)实现自定义拦截器,实现 Spring 中的 HandlerInterceptor接口中的 preHandle 方法。
b)将自定义拦截器加入到框架的配置中,并且设置拦截规则。
1)给当前的类添加@Configuration 注解
2)实现WebMvcConfigurer接口
3)重写addInterceptors方法
注意:一个项目中可以同时配置多个拦截器。
拦截器步骤1:实现自定义拦截器
拦截器步骤2:将自定义拦截器添加到系统配置中,并设置拦截的规则
此时插入一个小知识点,我们可以给所有地址添加上前缀:
统⼀异常处理
1、给当前的类上加@ControllerAdvice/@RestControllerAdvice
2、给方法上添加@ExceptionHandler(xxx.class),添加异常返回的业务代码
上面我们是针对具体的某一个异常来做处理,异常有很多很多,我们也可以在下面继续穷举各种异常,但是我们就算穷举了所有的异常,但是针对用户自定义的异常我们还是无法进行处理。这个时候,我们可以把所有异常的父类Exception进行统一异常处理,这样就可以处理所有的异常情况了。
统⼀数据格式封装
1、给当前类添加@ControllerAdvice。
2、实现 ResponseBodyAdvice重写其方法。
注意:support方法返回一个 boolean值,true表示返回数据之前对数据进行重写,也就是会进入下面 beforeBodyWrite方法。如果返回false,表示对结果不进行任何处理,直接返回数据。