Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自不同URL时的不同登录_Java_Security_Spring_Login_Spring Security - Fatal编程技术网

Java 来自不同URL时的不同登录

Java 来自不同URL时的不同登录,java,security,spring,login,spring-security,Java,Security,Spring,Login,Spring Security,我有一个使用自定义authenticationManager进行登录的应用程序。它只是搜索一个名为Users的表 <sec:authentication-manager alias="authenticationManager"> <sec:authentication-provider user-service-ref="userDAOImpl"> <sec:password-encoder hash="sha" /> <

我有一个使用自定义authenticationManager进行登录的应用程序。它只是搜索一个名为Users的表

<sec:authentication-manager alias="authenticationManager">
    <sec:authentication-provider user-service-ref="userDAOImpl">
        <sec:password-encoder hash="sha" />
    </sec:authentication-provider>
</sec:authentication-manager>

问题是,现在我需要做另一个登录,它必须在表“ExternalUsers”上搜索

应用程序的工作方式如下:

  • 如果请求来自像/external/**这样的url,我需要通过一个authenticationManager2在表“ExternalUsers”上搜索。这些用户只能访问/external/**URL
  • 如果请求来自另一个url,我需要通过authenticationManager1(我现在拥有的那个)来搜索表用户。这些用户可以访问所有URL,但与模式/external/**匹配的URL除外
  • 表users和ExternalUsers中可能有相同用户名的用户。这就是我需要根据url的来源设置不同登录名的原因。两个登录必须在同一个应用程序中

    在Spring中是否可以根据请求url配置两个不同的authenticationManager


    谢谢

    我不认为是弹簧提供了开箱即用的功能。但是您可以实现自己的身份验证提供程序(implement
    AuthenticationProvider
    Interface),它根据某种逻辑将身份验证委托给一个两个标准的spring身份验证提供程序

    Spring Security的未来版本可能允许多个身份验证管理器,但在此之前,一些定制将完成这项工作

    我认为拉尔夫的回答是正确的。您可以添加另一个http元素()以捕获外部/**url模式,并添加自定义登录筛选器以将不同的令牌(可以命名为ExternalUserPasswordAuthenticationToken,扩展AbstractAuthenticationToken)传递给身份验证提供程序。请参阅和我的答案,以开发您自己的令牌和提供者


    另一种方法(我不推荐)是为/external/**url模式设置一个投票者来执行身份验证任务。

    但是authenticationManager的实现如何知道请求的url?@Javi:my fault:authentication Provider not Manager