【发布时间】:2015-10-27 20:36:36
【问题描述】:
我正在将 Spring Security 与 SpringMVC 一起使用来创建一个与现有应用程序(我将其称为 BackendApp)对话的 Web 应用程序(为了清楚起见,我将其称为 WebApp)。
我想将身份验证职责委托给 BackendApp(这样我就不需要同步两个应用程序)。
为了实现这一点,我希望 WebApp(运行 Spring Security)使用用户在表单中提供的用户名和密码通过 REST 与 BackendApp 通信,并根据 BackendApp 的响应是 200 OK 还是 401 Unauthorized 进行身份验证.
我知道我需要编写一个自定义身份验证管理器来执行此操作,但是我对 spring 很陌生,找不到有关如何实现它的任何信息。
我相信我需要做这样的事情:
public class CustomAuthenticationManager implements AuthenticationManager{
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String pw = authentication.getCredentials().toString();
// Code to make rest call here and check for OK or Unauthorised.
// What do I return?
}
}
如果成功则设置 authentication.setAuthenticated(true),否则设置 false,仅此而已?
写完后,如何配置 spring security 以使用 java 配置文件使用此身份验证管理器?
提前感谢您的帮助。
【问题讨论】:
-
那么,您基本上是想通过 REST 进行身份验证,对吗?此外,您不仅会获得 200 或 401 的响应类型,您还将获得来自 Spring-Security 的 SessionID,您可以通过 REST 直接使用它来访问受保护的资源。
-
另外,请用一些相关名称提及您的应用程序,这个和那个应用程序令人困惑。
-
您应该深入了解 Spring Sec。参考,您需要设置一个 REST 客户端,保护服务,建立安全连接,不要将密码存储在字符串中,请记住,如果其他应用程序关闭,这也会关闭等等......最好设置一个LDAP 服务器或仅与其他应用程序共享数据库(只读)。您应该咨询顾问。
-
@WeareBorg 好点,我编辑了这个问题,希望让它更清楚。我不明白你的第一条评论。 Stefan 感谢您的建议。
-
对,就是我说的,你的webapp不需要写任何认证码。如果您在其中一个 web 应用程序中使用 Spring-Security,您可以随时调用 j_spring_security_check 并获取响应。根据响应,您可以允许或不允许访问资源。没有委托,什么都不需要。
标签: java spring spring-mvc spring-security