Angular + Фильтр кросс-происхождения Spring boot не работает - PullRequest
0 голосов
/ 28 мая 2020

Я знаю, что по этому поводу было задано много вопросов. Но все же я не смог решить проблему блокировки перекрестного происхождения в своем приложении. Я реализовал все фильтры в загрузочном приложении Spring, но проблема все еще возникает. Может ли кто-нибудь направить меня по правильному пути?

Angular application - http://localhost: 4200 / auth

Spring boot application - http://localhost: 8082 / app1

Основной класс

@SpringBootApplication
public class App1Application implements WebMvcConfigurer {

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

Класс фильтра Cors

@Component
public class CORSFilter implements Filter {

    public CORSFilter() {
        System.out.println("Filtering on...........................................................");
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }
}

Класс контроллера

@RestController
public class UserController {

    @GetMapping("/get-id")
    public String getId() {
        return "Welcome SSO";
    }

Application.yml

server:
  port: 8082
  servlet:
    context-path: /app1

Angular сервисная часть

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  private baseUrl ="http://localhost:8082/app1";

  constructor(private http: HttpClient) { }

  changeButton(id: number): Observable<any> {
    console.log("Service hit")
    return this.http.get<any>(this.baseUrl + '/get-id');
  }
}

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы должны включить CORS при весенней загрузке с помощью @CrossOrigin в контроллере или глобальной конфигурации, например:

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}

См .: Spring Boot Referenz CORS

или: Блог: поддержка CORS при весенней загрузке

В своем коде вы можете попробовать установить *

response.setHeader("Access-Control-Allow-Origin", "*");
0 голосов
/ 28 мая 2020

Взгляните на - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

origin выглядит неправильно.

...