JavaEE-统一功能处理

发布于:2025-06-27 ⋅ 阅读:(12) ⋅ 点赞:(0)

拦截器

实现强制登录的功能, 后端程序根据Session来判断⽤⼾是否登录, 但是实现⽅法是⽐较⿇烦的

需要修改每个接⼝的处理逻辑

需要修改每个接⼝的返回结果

接⼝定义修改, 前端代码也需要跟着修改

有没有更简单的办法, 统⼀拦截所有的请求, 并进⾏Session校验呢, 这⾥我们学习⼀种新的解决办法: 拦截器

拦截器快速入门

什么是拦截器?

拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执行预先设定的代码.

也就是说, 允许开发⼈员提前预定义⼀些逻辑, 在⽤⼾的请求响应前后执⾏. 也可以在⽤⼾请求前阻⽌其执⾏.

在拦截器当中,开发⼈员可以在应⽤程序中做⼀些通⽤性的操作, ⽐如通过拦截器来拦截前端发来的请求, 判断Session中是否有登录⽤⼾的信息. 如果有就可以放⾏, 如果没有就进⾏拦截.

⽐如我们去银⾏办理业务, 在办理业务前后, 就可以加⼀些拦截操作

办理业务之前, 先取号, 如果带⾝份证了就取号成功

业务办理结束, 给业务办理⼈员的服务进⾏评价.

这些就是"拦截器"做的⼯作.

拦截一般是在目标执行方法之前进行拦截,判断是否满足条件,返回true表示不拦截,返回false代表拦截。

而视图渲染部分现在基本已经不用了,不需要关注。

之前只是设置了拦截的条件和处理方法,实现WebMvcConfigurer接口的addInterceptors时定义要拦截哪些请求,并且调用之前定义的拦截方法。

需要注意的是,这个定义拦截请求需要将这个类交给spring保管,不然是不起效的。

拦截器详解

拦截路径

拦截器执⾏流程

正常的调⽤顺序:
有了拦截器之后,会在调⽤ Controller 之前进⾏相应的业务处理,执⾏的流程如下图

登录校验

了解拦截器的基本操作之后,接下来需要完成最后⼀步操作:通过拦截器来完成图书管理系统中的登录校验功能

定义拦截器

从session中获取⽤⼾信息, 如果session中不存在, 则返回false,并设置http状态码为401, 否则返回true

这里检查了用户的cookie是否携带了需要的sessionid,以及对应的保存在服务器当中的session之中是否保存了需要的数据,如果有就允许访问,没有的话就需要设置状态码。需要注意的是,这些是serverlet的操作,如果要填充数据的话,需要手动修改数据格式等操作。

注册配置拦截器

统一数据返回格式

通过来实现该接口的方法,来完成对返回数据的统一处理

存在问题

 多测试⼏种不同的返回结果, 发现只有返回结果为String类型时才有这种错误发⽣.

解决⽅案

再次测试就正确了

不过还需要做一些小修改

优点

统一异常处理 

@ExceptionHandler 是异常处理器,只有有该注解的方法才会被认为是统一处理异常的异常处理器,并通过参数来进行调用里面的方法。

匹配的规则是从子类开始向上匹配,最后才会匹配到Exception。

参数就是异常类型的匹配。

也可以在@ExceptionHandler("异常类型")这样来标注匹配的异常类。

当有多个异常通知时,匹配顺序为当前类及其⼦类向上依次匹配


网站公告

今日签到

点亮在社区的每一天
去签到