我有一个使用自定义身份验证管理器进行登录的应用程序。它只是搜索名为“用户”的表。
<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/** 网址
- 如果请求来自另一个网址,我需要通过一个authenticationManager1(我现在拥有的)来搜索用户表。这些用户可以访问除与/external/** 模式匹配的 URL 之外的所有 URL
Users 和ExternalUsers 表中可能存在具有相同用户名的用户。这就是为什么我需要根据它来自的 url 设置不同的登录名的原因。两次登录必须在同一应用程序中。
在Spring中是否可以根据请求的URL来配置两个不同的authenticationManager?
谢谢
最佳答案
我不认为 spring 提供了开箱即用的功能。但是您可以实现自己的身份验证提供程序(实现 AuthenticationProvider
接口(interface)),根据某些逻辑将身份验证委托(delegate)给两个标准 spring 身份验证提供程序。
关于java - 来自不同网址时的不同登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648767/