使用HandlerInterceptor或AbstractAuthenticationProcessingFilter进行Spring身份验证

Har*_*ana 5 java spring spring-security

弹簧org.springframework.web.servlet.HandlerInterceptororg.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter

我计划为我的应用程序添加身份验证。但是在HandlerInterceptor Doc中,

在异步处理方案中,处理程序可以在主线程退出时在单独的线程中执行,而无需呈现或调用postHandle和afterCompletion回调。

因此,在这种情况下,如果处理程序在单独的线程中执行,我会发现HandlerInterceptor不适合身份验证。

实施身份验证的最佳方法是什么?

Kam*_*kol 5

简短答案:使用Spring Security。它开箱即用地支持Servlet 3.x异步请求处理。请参阅文档

龙答HandlerInterceptorAbstractAuthenticationProcessingFilter可用于同样的目的,但通常在基于Spring项目认证/授权Spring Security中(处理AbstractAuthenticationProcessingFilter)。

HandlerInterceptor属于Spring MVC,并且-到目前为止,我已经见过-用于自定义日志记录,时间测量,HTTP标头操作或(用户)请求上下文增强。HandlerInterceptor可以将A 放在所有或特定的Spring MVC控制器之前,并在其中“存在” DispatcherServlet

相反,Spring Security的过滤器链与集成javax.servlet.Filter。简化的请求流如下所示:

Container connector
         V
Filter (Spring Security)
         V
DispatcherServlet (Spring MVC)
         V
HandlerInterceptor (Spring MVC)
         V
Controller (Spring MVC)
Run Code Online (Sandbox Code Playgroud)

Spring Security可以独立于Spring MVC来使用(看一下AbstractAuthenticationProcessingFilter,您可以看到它又从中GenericFilterBean实现Filter)。也就是说,您可以将身份验证/授权与Spring Security合并到任何其他Web框架中,例如JSF,GWT,Vaadin。

首先,春季安全的使用

基于Java EE的企业软件应用程序

但您也可以在Swing等桌面应用程序中使用它。老实说,到目前为止我还没有看到。

在我看来,您应该依靠成熟且功能丰富的框架(例如Spring Security或Apache Shiro)进行身份验证/授权。大多数时候,此类框架已经具有项目所需的所有功能。许多人使用的流行框架降低了由于频繁的错误报告和安全检查而导致出现严重错误或安全漏洞的可能性。请不要重新发明通常无法跟上不断发展的框架的软件质量和灵活性的步伐。