Spring Security: невозможно выполнить аутентификацию на стороне переднего плана - PullRequest
0 голосов
/ 20 января 2019

У меня есть бэкэнд Spring Boot и интерфейс на основе Angular 5. Я хочу сделать аутентификацию и авторизацию с помощью Spring Security.Я хочу, чтобы форма входа была настроена в Angular (http://localhost:4200/login).. Я хочу, чтобы пользователи, их пароли и роли находились в базе данных. Я не могу понять, как сказать Spring, что страница входа находится в другом домене (всторона интерфейса). Должен ли я определить / login в классе RestController или в Spring Security по умолчанию есть / login, который позволяет пользователям проходить аутентификацию? Пожалуйста, помогите.

я начал с тестовой конфигурации: пользователи впамять:

package smart.syndic.security;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{   

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception 
    {   
        auth.inMemoryAuthentication()
            .withUser("admin").password("1234")
            .roles("ADMIN");
    }

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception 
    {
        http.csrf().disable();
        http.authorizeRequests()
            .antMatchers("/login/**", "/administrateurs/**").permitAll()
            .and()
            .authorizeRequests().antMatchers(HttpMethod.GET, "/users").permitAll()
            .and()
            .exceptionHandling().accessDeniedPage("/forbidden")
            .and()
            .authorizeRequests().anyRequest().authenticated();

    }
}

1 Ответ

0 голосов
/ 20 января 2019

Если вы решили разделить бэкэнд и веб-интерфейс на 2 разных сервера (например, localhost: 8080 и localhost: 4200), то было бы более элегантно предположить, что бэкэнд ничего не знает о веб-интерфейсе.В этом подходе сервер должен возвращать статус 401 ( как здесь ), когда запрос не авторизован, и ваш пользователь должен обработать это, перенаправляя пользователя на страницу / login.

Чтобы сделать это весной, выможет сделать то же самое, что было в примере из комментария.

  1. Реализация фильтра
  2. Сказать Spring использовать этот фильтр как здесь WebSecurityConfig
  3. Создать контроллер для входа в систему
...