Spring MVC中如何配置并详述拦截器实现登录和多拦截器的执行顺序?
- 内容介绍
- 文章标签
- 相关推荐
本文共计836个文字,预计阅读时间需要4分钟。
在众多实际项目中,许多项目都具备登录注册功能。例如,我们现有的电商平台项目,若需查看购物车信息,必须先登录。
登录拦截
在我们的实际项目之中,大多数的项目都有登录注册的功能,有登录注册的功能。举个例子,比如我们现在有个电商平台的项目,如果需要查看购物车信息,我们就需要先登录,不可能说我们在浏览器中输入一个用户的购物车的url我们就能直接访问该用户的购物车,正常的情况是我们需要先登录才能进入购物车,所以我们就需要有登录拦截器。
拦截器常用参数
我们Spring MVC中最常用的参数是request、response、handler。
request:当前localhost/user/toSuccess路径,我们发现不能进入登录成功的页面,会出现登录页面。
我们登录之后才能进入登录成功的页面。
这时候我们再次直接访问localhost/user/toSuccess路径,也可以进入登录成功的页面了。
多拦截器配置以及执行问题
我们重新创建两个拦截器。
同样的,这两个拦截器也需要去配置。
然后我们重启项目,去Postman中测试。
请求成功后我们去查看打印信息:
preHandle 1...preHandle 2...
查询商品列表
postHandle 2...
postHandle 1...
afterCompletion 2...
afterCompletion 1...
发现了什么没有。
我们配置的拦截器的preHandle方法先执行了1然后执行2,剩下两个方法postHandle和afterCompletion则相反,先执行的2后执行的1。
如果我们设置其中一个拦截器的preHandle方法返回false会怎么样呢?
然后我们重启项目,去Postman中测试。
这次没有请求成功。
我们来查看下打印的信息:
preHandle 1...设置拦截器2不放行。
然后我们重启项目,去Postman中测试。
这次同样没有请求成功。
我们来查看下打印的信息:
preHandle 1...preHandle 2...
afterCompletion 1...
这次打印信息与上次不同,拦截器2的preHandle方法和拦截器1的afterCompletion方法也执行了。
如果有三个拦截器又是什么情况呢?
设置拦截器2不放行。
打印结果:
preHandle 1...preHandle 2...
afterCompletion 1...
设置拦截器3不放行。
打印结果:
preHandle 1...preHandle 2...
preHandle 3...
afterCompletion 2...
afterCompletion 1...
至此我们可以得出一个规律:当有多个拦截器时,有一个拦截器不放行,其他拦截器都放行时,该拦截器的preHandle方法会执行,该拦截器前面的拦截器preHandle方法和afterCompletion都会执行,所有的postHandle方法都不执行。
总结
Spring MVC的拦截器实现登录拦截的功能以及多拦截器的配置执行详解我们就介绍到这里。喜欢的小伙伴们多多支持,你们的支持就是我更新的动力。
本文共计836个文字,预计阅读时间需要4分钟。
在众多实际项目中,许多项目都具备登录注册功能。例如,我们现有的电商平台项目,若需查看购物车信息,必须先登录。
登录拦截
在我们的实际项目之中,大多数的项目都有登录注册的功能,有登录注册的功能。举个例子,比如我们现在有个电商平台的项目,如果需要查看购物车信息,我们就需要先登录,不可能说我们在浏览器中输入一个用户的购物车的url我们就能直接访问该用户的购物车,正常的情况是我们需要先登录才能进入购物车,所以我们就需要有登录拦截器。
拦截器常用参数
我们Spring MVC中最常用的参数是request、response、handler。
request:当前localhost/user/toSuccess路径,我们发现不能进入登录成功的页面,会出现登录页面。
我们登录之后才能进入登录成功的页面。
这时候我们再次直接访问localhost/user/toSuccess路径,也可以进入登录成功的页面了。
多拦截器配置以及执行问题
我们重新创建两个拦截器。
同样的,这两个拦截器也需要去配置。
然后我们重启项目,去Postman中测试。
请求成功后我们去查看打印信息:
preHandle 1...preHandle 2...
查询商品列表
postHandle 2...
postHandle 1...
afterCompletion 2...
afterCompletion 1...
发现了什么没有。
我们配置的拦截器的preHandle方法先执行了1然后执行2,剩下两个方法postHandle和afterCompletion则相反,先执行的2后执行的1。
如果我们设置其中一个拦截器的preHandle方法返回false会怎么样呢?
然后我们重启项目,去Postman中测试。
这次没有请求成功。
我们来查看下打印的信息:
preHandle 1...设置拦截器2不放行。
然后我们重启项目,去Postman中测试。
这次同样没有请求成功。
我们来查看下打印的信息:
preHandle 1...preHandle 2...
afterCompletion 1...
这次打印信息与上次不同,拦截器2的preHandle方法和拦截器1的afterCompletion方法也执行了。
如果有三个拦截器又是什么情况呢?
设置拦截器2不放行。
打印结果:
preHandle 1...preHandle 2...
afterCompletion 1...
设置拦截器3不放行。
打印结果:
preHandle 1...preHandle 2...
preHandle 3...
afterCompletion 2...
afterCompletion 1...
至此我们可以得出一个规律:当有多个拦截器时,有一个拦截器不放行,其他拦截器都放行时,该拦截器的preHandle方法会执行,该拦截器前面的拦截器preHandle方法和afterCompletion都会执行,所有的postHandle方法都不执行。
总结
Spring MVC的拦截器实现登录拦截的功能以及多拦截器的配置执行详解我们就介绍到这里。喜欢的小伙伴们多多支持,你们的支持就是我更新的动力。

