Http Basic аутентификация с использованием Spring Security с Angular 6 - PullRequest
0 голосов
/ 10 октября 2018

Я разрабатываю приложение Angular 6, для которого я использую Spring Boot для служб REST и использую базовую аутентификацию Spring Security для авторизации.

Проблема в том, что базовая аутентификация не работает, и она отображается всплывающимкаждый раз, когда я вхожу в приложение.Я использую перехватчик в угловом 6 для добавления заголовка авторизации.

Может кто-нибудь помочь, пожалуйста, где я иду не так?

Код:

@Injectable()
export class HttpTokenInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
        let username=localStorage.getItem("username")
        let password=localStorage.getItem("password")
        const customReq = req.clone({
            headers: req.headers.set("Authorization", "Basic " + btoa(username+":"+password) )
        });
        return next.handle(customReq);
    }

    constructor() { }
}

Ивесенний загрузочный код

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        http.httpBasic().and().authorizeRequests().antMatchers("/index.html", "/", "/home/**", "/login").permitAll()
                .anyRequest().authenticated().and().csrf().disable().httpBasic();

    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(userDetailsService);
        authProvider.setPasswordEncoder(encoder());
        return authProvider;
    }

    @Bean
    public PasswordEncoder encoder() {
        return new BCryptPasswordEncoder(11);
    }
}

Поскольку я новичок в Spring, пожалуйста, дайте мне знать, если вам нужны другие файлы.

1 Ответ

0 голосов
/ 10 октября 2018

Обычно это происходит, когда ваш @ SpringBootApplication класс находится в одном пакете, а ваш SecurityConfig класс отсутствует в подпакете.

Например, если Application - этов пакете com.example.app и ваша конфигурация безопасности находится в com.security.example, тогда Spring не может найти вашу конфигурацию и продолжает использовать настройки безопасности Spring, такие как страница входа на основе формы.

Пожалуйста, проверьте структуру пакета и добавьте @ComponentScan при необходимости.

...