Java 如何在spring security中实现多表单登录和自定义请求登录

Java 如何在spring security中实现多表单登录和自定义请求登录,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我有两台服务器: 服务器1:通过电子邮件和密码登录 服务器2:通过电话和密码登录 我想在spring security中使用两个服务器登录。我希望在spring security中使用urlserver1/login和server2 lognserver2/login登录服务器1。我写的spring security看起来像: http.csrf().disable() .sessionManagement().sessionCreationPolicy(

我有两台服务器: 服务器1:通过电子邮件和密码登录 服务器2:通过电话和密码登录

我想在spring security中使用两个服务器登录。我希望在spring security中使用url
server1/login
和server2 logn
server2/login
登录服务器1。我写的spring security看起来像:

    http.csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()

                .httpBasic().authenticationEntryPoint(authenticationEntryPoint)

                .and()
                .authorizeRequests()

                .anyRequest()
                .authenticated()
                .and()
                .formLogin() 
                .loginProcessingUrl("/server1/login")
                .usernameParameter("email")
                .successHandler(authenticationSuccessHandler) 
                .failureHandler(authenticationFailureHandler) 
                .and()
                .formLogin()
                .loginProcessingUrl("/server2/login")
                .usernameParameter("phone")
                .successHandler()

                .permitAll(); 
但它不起作用

我想将loginProcessingUrl(“/server1/login”)=>移动到控制器并验证它(验证电子邮件和密码,搜索电子邮件并检查一些信息数据库)。它与服务器2相同。 将loginProcessingUrl(“/server2/login”)=>移动到控制器并验证它(通过电话和密码,搜索电子邮件并检查信息数据库) =>可能吗

我有两个问题

  • 如何在spring security中使用两台服务器进行多重登录:服务器1通过(电子邮件和密码)登录,服务器2通过(电话和密码)登录。当服务器调用login时,它重定向到通过电子邮件登录,服务器2通过电话登录
  • 如何自定义api登录spring。因为spring默认通过用户名和密码登录。我希望通过电话和密码登录。如何在控制器中创建自定义api登录并处理每个服务器的登录。因为如果我创建自定义api,我无法检测用户何时登录成功。但是当我使用
    loginProcessingUrl(“/server1/login”)时
    spring通过AuthenticationSuccessHandler自动检测。谢谢

  • 我认为在同一配置中不能有多个formLogin。请使用单独的模式和顺序(例如,默认配置中的
    /server1
    (顺序=默认100)和新配置中的
    /server2
    (顺序=50)添加一个新的
    /WebSecurity ConfigureAdapter
    实现,类似这样的内容:这样我可以通过电话而不是电子邮件自定义表单登录,并且可以将url/登录更改为我的控制器。示例/server1/登录并验证它。这是可能的吗?仔细想想,您不需要单独实现
    websecurityConfigureAdapter
    。我认为一个
    表单登录()
    将起作用。您应该在登录表单中保留用户名和密码的通用名称,例如
    .usernameparmeter(“login\u id”).passwordParameter(“password”)
    并验证电话或电子邮件(“login\u id”的值)在身份验证过程中。原因是spring安全筛选器使用了
    loginProcessingUrl