在 Spring Security 中登陆注册等接口放在过滤器(Filter)还是控制器(Controller)中?

126 天前
Koril  Koril

之前一些老项目都是放在 AuthController ,jwt 的校验放在 JwtAuthFilter 里。

但是我看了下 spring security 官网架构介绍,以及看了下 UsernamePasswordAuthenticationFilter 类,

我感觉是不是所有跟认证授权相关的东西全部放 Filter 就好了? controller 只负责一些业务逻辑的接口,跟认证授权完全无关。

比如现在,我移除掉 controller 的那些 /login ,/register, /refreshToken 之类的接口,然后再增加 LoginFilter/RegisterFilter 等过滤器,塞到 JwtAuthFilter 后面,这样做符合规范吗,最佳实践是什么?

我目前试了下,两种模式都能走通正常的登录认证流程,但是我不太喜欢多种方式的实现,就像 import this 里面说的:There should be one-- and preferably only one --obvious way to do it.

736 次点击
所在节点   问与答  问与答
2 条回复
flmn
flmn
121 天前
Spring Security 把登录放到 Filter 里,是为了它自身的统一,或者说是权宜之计,如果你用它自身的登录,比如 Basic ,可以直接用。
但是如果你自己做的认证,Filter 只用来鉴权,那么大胆的放 Controller 里面吧,最符合直觉。我就是这样干的。
所以说不要用 Spring Security 的错误来惩罚自己,怀疑自己。
Koril
Koril
118 天前
@flmn 好的,谢谢你的建议

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1081276

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX