春天org.springframework.web.servlet.HandlerInterceptor
和org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
我打算为我的应用程序添加身份验证。 但是在HandlerInterceptor Doc中它说,
在异步处理场景中,处理程序可以在a中执行 主线程退出时没有渲染或单独的线程 调用postHandle和afterCompletion回调。
因此,在这种情况下,如果处理程序在一个单独的线程中执行,我发现HandlerInterceptor不适合进行身份验证。
实施身份验证的最佳方式是什么?
答案 0 :(得分:4)
简短回答:使用Spring Security。它支持开箱即用的Servlet 3.x异步请求处理。请参阅documentation。
长答案:HandlerInterceptor
和AbstractAuthenticationProcessingFilter
可能用于同一目的,但通常在基于Spring的项目中,身份验证/授权由Spring Security处理({{1 }})。
AbstractAuthenticationProcessingFilter
属于Spring MVC,是我职业生涯中迄今为止看到的 - 用于自定义日志记录,时间测量,HTTP标头操作或(用户)请求上下文增强。 HandlerInterceptor
可以放在所有或特定的Spring MVC控制器之前,并“生活”在DispatcherServlet
内。
相比之下,Spring Security的过滤器链与javax.servlet.Filter
集成在一起。简化的请求流程如下所示:
HandlerInterceptor
Spring Security可以独立于Spring MVC使用(看看Container connector
V
Filter (Spring Security)
V
DispatcherServlet (Spring MVC)
V
HandlerInterceptor (Spring MVC)
V
Controller (Spring MVC)
,您可以看到它派生自GenericFilterBean
,后者又实现了Filter
)。也就是说,您可以将身份验证/授权与Spring Security结合在任何其他Web框架中,例如JSF,GWT,Vaadin。
首先,Spring Security是used
基于Java EE的企业软件应用程序
但您也可以在Swing等桌面应用程序中使用它。老实说,到目前为止我没有看到它。
在我看来,你应该依赖一个成熟且功能丰富的框架,如Spring Security或Apache Shiro来进行身份验证/授权。大多数情况下,此类框架已具备您的项目所需的所有功能。许多人使用的流行框架减少了由于频繁的错误报告和安全检查而导致严重错误或安全漏洞的可能性。请不要重新发明通常无法跟上软件质量和增长框架灵活性的步伐。