Spring Boot: объединение LDAP и локальной аутентификации с входом в условную формуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot: объединение LDAP и локальной аутентификации с входом в условную форму

Сообщение Anonymous »

Я разрабатываю приложение Spring Boot, которому требуется взаимодействие с сервером LDAP для аутентификации управления доступом на основе ролей (RBAC). Кроме того, когда сервер LDAP недоступен, приложение должно переключиться на использование локальных резервных учетных записей для аутентификации.
Я успешно реализовал оба метода аутентификации по отдельности, и они работают нормально. Однако я столкнулся с проблемами при объединении двух реализаций, особенно в классе SecurityConfiguration для входа в форму.
Вот контекст моей реализации:
HTML-формы:
В login.html у меня есть следующая форма: html
В loginLdap.html у меня есть: html
Логика контроллера: у меня есть метод контроллера, который определяет, какую страницу входа отображать в зависимости от доступности LDAP:

Код: Выделить всё

@GetMapping("/login")
public String login(Model model) {
if (ldapService.isLdapAvailable()) {
System.out.println("Inside login method. LDAP is available.");
return "loginLdap";  // Redirect to loginLdap page if LDAP connection is successful
} else {
System.out.println("Inside login method. LDAP is unavailable.");
model.addAttribute("ldapUnavailableMessage", "LDAP service is currently unavailable. Do you want to continue with local backup authentication?");
return "login";  // Return login page without an LDAP
}
}
До этого всё работает нормально. Он перенаправляется на нужную HTML-страницу, и я вижу форму входа в систему в зависимости от доступности LDAP. Теперь о
Конфигурации безопасности
У меня возникли трудности с настройкой класса SecurityConfiguration для правильной обработки обоих методов аутентификации. В частности, я не уверен, как настроить метод formLogin() для использования двух разных форм входа в зависимости от доступности LDAP.
Теперь в классе SecurityConfiguration. файл у меня есть следующий код:

Код: Выделить всё

 .formLogin(
form -> form
.loginPage("/login").loginProcessingUrl("/user_login").usernameParameter("username").passwordParameter("password").defaultSuccessUrl("/syslogger")
.permitAll()
)
Этот код работает нормально, когда LDAP недоступен. Вся авторизация (на основе роли в базе данных Postgres) работает нормально. Однако, когда сервер LDAP доступен, он не перенаправляется на @PostMapping("/admin_login") в моем основном контроллере.
Проблемы:Я не уверен, как настроить класс SecurityConfiguration для обработки этих различных сценариев входа в систему.
Мне хотелось бы узнать, как обеспечить вызов правильного метода аутентификации на основе выбора пользователем страницы входа. p>
Ниже я попробовал:
spring-security-two-login-pages

Код: Выделить всё

 @Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/user-login")
.loginProcessingUrl("/user-login-process")
.defaultSuccessUrl("/user/home")
.permitAll()
.and()
.formLogin()
.loginPage("/admin-login")
.loginProcessingUrl("/admin-login-process")
.defaultSuccessUrl("/admin/dashboard")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/login")
.permitAll();
}
Помимо этих, я пробовал различные другие методы и логику, но не смог достичь желаемого результата.
Дополнительная информация:
strong>
Я использую Spring Boot, REST API и PostgreSQL для своего приложения.
Любая помощь или примеры, касающиеся настройки SecurityConfiguration, будем очень признательны!

Подробнее здесь: https://stackoverflow.com/questions/787 ... form-login
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»