Spring Security и Angular 6 HTTPS-запросы

мое бэкэнд-приложение в весенней загрузке и защищено ssl. Я использовал вход в Facebook OAuth2. Также внешнее приложение в Angular 7 и защищено ssl. Моя проблема заключается в отправке запросов Angular в мое приложение Spring boot. Все приложения https.

P.S. Все работает, если я добавляю URL-адрес в webSecurity.ignoring(). и не защитить мой бэкэнд. я думаю, что какая-то проблема с безопасностью и HTTPS-запросами. СПАСИБО ЗА ПОМОЩЬ.

Бэкэнд

SecurityConfig.java

@RestController
@CrossOrigin(origins = "https://192.168.1.106:4400")
@Configuration
@Order(1000)
@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserRepo userRepo;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .cors().and()
            .csrf().disable()
            .authorizeRequests()
            .antMatchers(HttpMethod.GET, "/unauth/**").permitAll()
            .antMatchers(HttpMethod.POST, "/unauth/upload").permitAll()

            .antMatchers(HttpMethod.POST, "/api/**").authenticated()
            .antMatchers(HttpMethod.PUT, "/api/**").authenticated()
            .antMatchers(HttpMethod.DELETE, "/api/**").authenticated()
            .antMatchers(HttpMethod.GET, "/api/**").authenticated()
            .anyRequest().permitAll()
            .and().logout().logoutSuccessUrl("/").permitAll();

}

@Override
public void configure(WebSecurity webSecurity) {
    webSecurity.ignoring().antMatchers(HttpMethod.GET, "/unauth/**");
    webSecurity.ignoring().antMatchers(HttpMethod.POST, "/unauth/**");
}
  webSecurity.ignoring().antMatchers(HttpMethod.POST, "/unauth/**");
}

SomeRestController.java

 @RestController
 @CrossOrigin(origins = "https://192.168.1.106:4400")
  @RequestMapping ("/api")
 public class ProductService {



@Autowired
private ProductRepo productRepo;

@CrossOrigin(origins = "https://192.168.1.106:4400")
@GetMapping("/products")
public List<Product> getProducts(){
    return productRepo.findAll();

}

SpringBootApplication.java

@SpringBootApplication
@EnableOAuth2Sso
@CrossOrigin(origins = {"https://192.168.1.106:4400"}, allowCredentials = "false")
public class MongoTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(MongoTestApplication.class, args);
    }
}

ВНЕШНИЙ ИНТЕРФЕЙС

SomeComponent.html ‹ кнопка (щелчок)="makeRequest()"> СДЕЛАТЬ ЗАПРОС ‹ /button >

SomeComponent.ts

val:any = {};
  makeRequest(){
    this.http.get("https://localhost:8443/api/products").subscribe(value =>  {this.val = value; console.log(this.val.key)});
  }

ОШИБКА

error in browser

Access to XMLHttpRequest at 'https://localhost:8443/api/brands' from origin 'https://192.168.1.106:4400' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
core.js.pre-build-optimizer.js:15714 ERROR n {headers: t, status: 0, statusText: "Unknown Error", url: "https://localhost:8443/api/brands", ok: false, …}

person Ibrahim Rajabli    schedule 18.03.2019    source источник
comment
Вы устанавливаете свой перекрестный источник на стороне API на 192.168.1.106:4400, но доступ к нему из localhost:8443/api/products. Это совершенно разные доменные имена. Попробуйте получить к нему доступ, используя IP (порт должен быть таким же). Есть ли прокси-сервер между клиентом и серверной частью, поскольку вы обращаетесь к 8443 и ожидаете, что он будет маршрутизироваться на порт 4400?   -  person printfmyname    schedule 18.03.2019
comment
я пытаюсь со всеми приложениями с локальным хостом. такие же результаты. Я думаю, что все равно.   -  person Ibrahim Rajabli    schedule 18.03.2019
comment
Попробуйте этот ответ с рабочим решением той же проблемы, с которой вы столкнулись, stackoverflow .com/questions/40286549/spring-boot-security-cors .   -  person printfmyname    schedule 18.03.2019
comment
я использую все возможные о фильтрации. Нет результатов. просто дайте исключение, например org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource ...'   -  person Ibrahim Rajabli    schedule 18.03.2019
comment
Это частая ошибка с Access-Control-Allow-Origin. Попробуйте поискать еще. Я предлагаю поискать, как использовать webpack proxy, чтобы передняя и задняя части выглядели так, как будто они работают на одном порту. Аннотация @CrossOrigin(...), которую вы использовали, не является лучшей практикой.   -  person Amir Choubani    schedule 19.03.2019
comment
@AmirChoubani один вопрос. Почему это работает, когда я добавляю эту ссылку в webSecurity.ignoring().antMatchers(HttpMethod.GET, /api/**); все работало отлично. ? зачем нам такой же порт? это разные приложения. и я думаю, что не нужно слово один порт.   -  person Ibrahim Rajabli    schedule 19.03.2019
comment
Плагин webpack упрощает работу с Access-Control-Allow-Origin. С решением, которое вы предложили, вы сказали весенней безопасности, эй, игнорируйте любой запрос типа get и post ect, поступающий извне на URL-адрес /api/**   -  person Amir Choubani    schedule 19.03.2019
comment
окей сейчас поищу.   -  person Ibrahim Rajabli    schedule 19.03.2019


Ответы (1)


Отредактируйте свой основной класс, как показано ниже, и удалите все @CrossOrigin из контроллеров.

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
@EnableOAuth2Sso
public class MongoTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(MongoTestApplication.class, args);
    }

 @SuppressWarnings("deprecation")
    @Bean
        public WebMvcConfigurer corsConfigurer()
        {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**").allowedMethods("GET", "PUT", "POST", "DELETE", "OPTIONS");
                }    
            };
        }
}
person shreyansh sharma    schedule 18.03.2019
comment
я меняю свои классы, но те же результаты. - person Ibrahim Rajabli; 18.03.2019