我将 Spring Security 与 SpringMVC 结合使用来创建一个与现有应用程序(我将其称为 BackendApp)通信的 Web 应用程序(为清楚起见,我将其称为 WebApp)。
我想将身份验证责任委托给 BackendApp(这样我就不需要同步这两个应用程序)。
为了实现这一点,我希望 WebApp(运行 spring security)通过 REST 使用用户以表单形式提供的用户名和密码与 BackendApp 通信,并根据 BackendApp 的响应是 200 OK 还是 401 Unauthorised 进行身份验证。
我知道我需要编写一个自定义身份验证管理器来执行此操作,但是我对 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 配置文件使用此身份验证管理器?
在此先感谢您的帮助。
原文由 nbdy_ 发布,翻译遵循 CC BY-SA 4.0 许可协议
看看我下面的示例。您必须返回一个 UsernamePasswordAuthenticationToken。它包含主体和 GrantedAuthorities。希望我能帮上忙 :)
PS:userRepo 和 rightRepo 是 Spring-Data-JPA 存储库,它访问我的自定义用户数据库
SpringSecurity Java配置: