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