老师好, 我有个问题. 关于8-11使用LoginFilter来进行RequestHolder.add操作的疑问.

来源:8-11 ThreadLocal,LoginFilter实现登录请求的拦截

banjuer

2018-05-25

 为什么不在HttpInterceptor的preHandle里进行RequestHolder.add操作呢? 

preHandle根据url可以获得当前登录请求, 同样也可以用session判断当前用户是否存在. 然后在请求中进行RequestHolder.add.而且remove操作就在HttpInterceptor请求结束后.  希望老师抽空解答一下

写回答

1回答

Jimin

2018-05-26

你好,就目前课程里的代码来说,你这样做可以达到相同的结果,这是没问题的。
说一下我这里为什么这样做。首先呢,这个类名字叫LoginFilter,从类名上我们就知道ta是用来处理登陆过滤的,因此逻辑写在这里很合适,也很容易找到,这里说的容易不光是指自己,而是团队。
在实际项目中,我们可能需要定义多个filter来解决不同的问题,控制好filter顺序,不同的filter做不同的事情。这时单独使用一个interceptor就不太好了,一个preHandle方法可能要不断堆积不同的业务方法。
另外,我们习惯是在interceptor里做所有接口都要做的事情,而Filter的话则可以限定只对某些接口做处理,不一定是所有接口都做处理。这里做登陆检查就是,我们只针对指定的接口拦截、检查就可以,不需要对所有接口做处理。Filter在初始化时就可以指定拦截的接口,以及全部放行的白名单接口列表。而interceptor针对所有接口,就比较适合记录所有接口请求日志,以及在接口处理完后做一些收尾处理。
这些基本上就是我在课程实现上使用filter来做而没使用interceptor来做的主要考虑点了。当实际项目之有一个filter时,或者filter很少时,使用interceptor来实现也没什么问题。
祝你学习愉快~

2
3
banjuer
回复
Jimin
好的, 感谢老师. 我去看看, 谢谢!
2018-05-28
共3条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2267 学习 · 1347 问题

查看课程