Java 如何创建异步Spring身份验证提供程序
我们有一些使用Spring的Spring MVC web服务。据我所知,这允许更大的可伸缩性,因为web容器创建的线程更少 我们还使用Spring Security来保护我们的服务。是否可以使身份验证管理器和身份验证提供程序也异步运行 我们的身份验证提供商需要访问数据库或外部web服务。因此,web请求的身份验证部分肯定会有一些延迟。如果没有异步身份验证管理器,异步控制器方法的好处似乎会减少 authenticate()方法是一种同步方法 澄清一下,我不是说从异步MVC控制器中获取Spring凭据。我找到了很多关于这方面的文件Java 如何创建异步Spring身份验证提供程序,java,spring,authentication,spring-mvc,spring-security,Java,Spring,Authentication,Spring Mvc,Spring Security,我们有一些使用Spring的Spring MVC web服务。据我所知,这允许更大的可伸缩性,因为web容器创建的线程更少 我们还使用Spring Security来保护我们的服务。是否可以使身份验证管理器和身份验证提供程序也异步运行 我们的身份验证提供商需要访问数据库或外部web服务。因此,web请求的身份验证部分肯定会有一些延迟。如果没有异步身份验证管理器,异步控制器方法的好处似乎会减少 authenticate()方法是一种同步方法 澄清一下,我不是说从异步MVC控制器中获取Spring凭
下面是我目前如何定义Spring安全应用程序上下文的
<http auto-config="true" entry-point-ref="authenticationEntryPoint" create-session="never" use-expressions="true">
<intercept-url pattern="/**" access="hasRole('ROLE_ADMIN') or hasRole('ROLE_USER')"/>
</http>
<authentication-manager>
<authentication-provider ref="myAuthenticationProvider" />
</authentication-manager>
<beans:bean name="myAuthenticationProvider" class="com.testing.CustomAuthenticationManager"/>
我的web控制器如下所示
@RequestMapping(value = "{id}", method = RequestMethod.GET)
@ResponseBody
public Callable<ResponseEntity> getData(@PathVariable String id) {
return new Callable<ResponseEntity>() {
@Override
public ResponseEntity call() throws Exception
{
}
}
@RequestMapping(value=“{id}”,method=RequestMethod.GET)
@应答器
公共可调用getData(@PathVariable字符串id){
返回新的可调用(){
@凌驾
public ResponseEntity调用()引发异常
{
}
}
当然,我有一个CustomAuthenticationManager的实现
从我对Spring安全性和MVC的理解来看,这是Spring正在做的一个粗略的表示
- 身份验证提供程序(以某种方式)告诉Spring它是异步的
- Spring调用AsyncContext.start(可运行)
- 身份验证提供程序需要一段时间进行身份验证,然后返回结果
- Spring完成了异步上下文