采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为什么不在HttpInterceptor的preHandle里进行RequestHolder.add操作呢?
preHandle根据url可以获得当前登录请求, 同样也可以用session判断当前用户是否存在. 然后在请求中进行RequestHolder.add.而且remove操作就在HttpInterceptor请求结束后. 希望老师抽空解答一下
你好,就目前课程里的代码来说,你这样做可以达到相同的结果,这是没问题的。说一下我这里为什么这样做。首先呢,这个类名字叫LoginFilter,从类名上我们就知道ta是用来处理登陆过滤的,因此逻辑写在这里很合适,也很容易找到,这里说的容易不光是指自己,而是团队。在实际项目中,我们可能需要定义多个filter来解决不同的问题,控制好filter顺序,不同的filter做不同的事情。这时单独使用一个interceptor就不太好了,一个preHandle方法可能要不断堆积不同的业务方法。另外,我们习惯是在interceptor里做所有接口都要做的事情,而Filter的话则可以限定只对某些接口做处理,不一定是所有接口都做处理。这里做登陆检查就是,我们只针对指定的接口拦截、检查就可以,不需要对所有接口做处理。Filter在初始化时就可以指定拦截的接口,以及全部放行的白名单接口列表。而interceptor针对所有接口,就比较适合记录所有接口请求日志,以及在接口处理完后做一些收尾处理。这些基本上就是我在课程实现上使用filter来做而没使用interceptor来做的主要考虑点了。当实际项目之有一个filter时,或者filter很少时,使用interceptor来实现也没什么问题。祝你学习愉快~
感谢Jimin老师的耐心解答. 我有个想法, 关于追踪用户请求处理日志的. 需求是想每一条日志都有一个当前请求操作的ID, 便于定位当前日志是属于哪个请求输出的. RequestHolder添加一个ThreadLocal<String> id的属性. 在LoginFilter同一个位置生成一个日志id存放进去, 后面所有的日志输出的时候都把这个id加进去. 这种情况应该可行吧? 另外一般项目里标记日志id是怎么做的, 老师有相关文章介绍一下吗. 感激不尽! 最好能有这个Id生成的方法... 感谢
好想法啊,其实这个是有比较标准解决方案的,链路跟踪,具体可以参考一下google dapper,只是自己倒腾起来可能并不是那么容易。我们也是基于google dapper的思想封装了公司内部自己使用的链路跟踪组件
好的, 感谢老师. 我去看看, 谢谢!
登录后可查看更多问答,登录/注册
源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术
2.2k 6
1.8k 22
1.1k 20
936 18