Настройка Spring Security не работает должным образом - PullRequest
0 голосов
/ 24 апреля 2018

Я запускаю приложение 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().Было бы замечательно, если бы кто-то мог направить меня к некоторым ресурсам, которые объясняют все мелочи конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...