微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自不同URL的不同登录名

如何解决来自不同URL的不同登录名

| 我有一个使用自定义authenticationManager进行登录的应用程序。它只是在名为“用户”的表上搜索
<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,我需要通过一个authenticationManager1(我现在拥有的URL)在表Users上进行搜索。这些用户可以访问除与模式/ external / **匹配的URL之外的所有URL。 表Users和ExternalUsers中的用户可能具有相同的用户名。这就是为什么我需要根据其来自的URL设置不同的登录名的原因。两个登录名必须在同一应用程序中。 在Spring中是否可以根据请求的URL配置两个不同的authenticationManager,每个身份管理器一个? 谢谢     

解决方法

我不认为那年春天开箱即用。但是您可以实现自己的身份验证提供程序(实现
AuthenticationProvider
接口),根据某些逻辑将身份验证委派给一两个标准的spring身份验证提供程序。     ,Spring Security的未来版本可能会允许多个身份验证管理器,但在此之前,一些自定义项将完成这项工作。 我认为拉尔夫的答案是正确的方向。您可以添加另一个http元素(Spring Security 3.1)来捕获外部/ ** url模式,并添加自定义登录过滤器以将其他令牌(可以命名为扩展AbstractAuthenticationToken的ExternalUserPasswordAuthenticationToken)传递给身份验证提供程序。请参阅配置Spring Security 3.x以具有多个入口点以及我对使用外部Web服务对用户进行身份验证的答案,以开发自己的令牌和提供程序。 我不推荐的另一种方法是为/ external / ** url模式设置Voter来执行身份验证工作。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。