Я запускаю приложение Spring Boot, в котором оно запускает внешний интерфейс vuejs, развернутый как статические ресурсы, и API, управляемый Spring.Я настраиваю аутентификацию, и сценарий таков.
Приложение внешнего интерфейса находится на /app
, но Spring все равно перенаправляется на /app
.Я хочу, чтобы для моего приложения был выполнен вход в систему с помощью формы / login.Мое приложение использует API, предоставляемый Spring, и API находится на /api
.Поэтому я хочу, чтобы API распознал вошедший в систему сеанс с помощью внешнего интерфейса.Но я также хочу, чтобы API проходил базовую аутентификацию.В то же время я не хочу, чтобы какой-либо маршрут, кроме /api
, проходил базовую аутентификацию, т. Е. Даже если я предоставляю заголовок аутентификации, он все равно должен перенаправить меня на /login
.Итак,
/api
Базовая и сессионная аутентификация /**
Только сессионная аутентификация через форму
Я использую текущий код:
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${ldap.urls}")
private String ldapUrls;
@Value("${ldap.base.dn}")
private String ldapBaseDn;
@Value("${ldap.username}")
private String ldapSecurityPrincipal;
@Value("${ldap.password}")
private String ldapPrincipalPassword;
@Value("${ldap.user.dn.pattern}")
private String ldapUserDnPattern;
private AuthenticationEntryPoint authenticationEntryPoint;
@Autowired
public SecurityConfig(AuthenticationEntryPoint authenticationEntryPoint) {
super();
this.authenticationEntryPoint = authenticationEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/api/**").authenticated()
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint)
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.contextSource()
.url(ldapUrls + ldapBaseDn)
.managerDn(ldapSecurityPrincipal)
.managerPassword(ldapPrincipalPassword)
.and()
.userDnPatterns(ldapUserDnPattern);
}
}
Это работает не совсем так, как ожидалось.Мой API аутентифицирован через токены Basic и Session, но и мое приложение тоже.то есть я могу сделать запрос GET в Postman вместе с заголовками Basic Authentication и вернуть HTML на мою домашнюю страницу.
Вместе с тем я не думаю, что хорошо понимаю, как выполняется настройка конфигурации, особенно с использованием and()
.Было бы замечательно, если бы кто-то мог направить меня к некоторым ресурсам, которые объясняют все мелочи конфигурации.