Доступ к политике CORS XMLHttpRequest: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin» - PullRequest
1 голос
/ 18 марта 2020

У меня есть фронт-проект, использующий angular 7, и другой бэкэнд-проект, использующий пружинную загрузку jhipster

Я использую tomcat 9

Я развертываю два проекта под tomcat 9

Я могу работать с моим приложением, используя @ ip

Я использую эту ссылку http://192.168.0.120/univesity и для API-интерфейса бэкэнда: http:192.168.0.120: 8080 / myapp

теперь у меня есть apache сервер, который взаимодействует с сервером tomcat.

, поэтому приложение будет называться так: http://appuni.edu.com который будет перенаправлять на http://appuni.edu.com/univesity

Я делаю эту конфигурацию в tomcat для перенаправления с http://appuni.edu.com на http://appuni.edu.com/univesity

  <Context path="" docBase="univesity">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>


</Context>

, когда я пытаюсь вызвать приложение, используя http://appuni.edu.com/univesity, оно отображает страницу входа

, но у меня есть эта ошибка, когда я пытаюсь войти в систему

Access to XMLHttpRequest at 'http://http:192.168.0.120:8080/myapp/api/account' 
from origin 'http://appuni.edu.com' 
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я пытаюсь со многими решениями без успеха

в проекте Bakend:

Я пытаюсь добавить в UserJWTController class * 10 59 *

  @CrossOrigin(origins = "*")

и пытаюсь добавить в метод configure (HttpSecurity http)

antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 

и зарабатываю в application.yml

 cors:
         allowed-origins: "http://appuni.edu.com"
         allowed-methods: "*"
         allowed-headers: "*"
         exposed-headers: "Authorization,Link,X-Total-Count"
         allow-credentials: true
         max-age: 1800

в переднем проекте:

и пытаюсь сделать в proxy.conf. json

{
    "/api": {
        "target": "http://appuni.edu.com",
        "pathRewrite": {
        "^/api": ""
       },
       "changeOrigin": true,
       "logLevel": "debug"
    }
}

и я попробуйте сделать этот код в auth-jwt.service.ts

 const headers = new HttpHeaders()
  .append('Content-Type', 'application/json')
  .append('Access-Control-Allow-Headers', 'Content-Type')
  .append('Access-Control-Allow-Methods', "GET, POST, DELETE, PUT")
  .append('Access-Control-Allow-Origin', '*');

@Injectable({ providedIn: 'root' })
export class AuthServerProvider {
    constructor(private http: HttpClient, private $localStorage: LocalStorageService, private $sessionStorage: SessionStorageService) {}

    getToken() {
        return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken');
    }

    login(credentials): Observable<any> {
        const data = {
            username: credentials.username,
            password: credentials.password,
            rememberMe: credentials.rememberMe
        };
        return this.http.post(SERVER_API_URL + 'api/authenticate', data, {'observe': 'response',
        'headers':headers}).pipe(map(authenticateSuccess.bind(this)));

        function authenticateSuccess(resp) {
            const bearerToken = resp.headers.get('Authorization');
            console.log('bearerToken:' + bearerToken);

            if (bearerToken && bearerToken.slice(0, 7) === 'Bearer ') {
                const jwt = bearerToken.slice(7, bearerToken.length);
                this.storeAuthenticationToken(jwt, credentials.rememberMe);
                return jwt;
            }
        }
    } 

Я не знаю, проблема связана с backend или front

, используя @Ip, это работает, но используя http://appuni.edu.com есть проблема

Обновлено:

Я делаю это обновление:

 cors: 
         allowed-origins: "*"
         allowed-methods: GET, PUT, POST, DELETE, OPTIONS
         allowed-headers: "*"
         exposed-headers:
         allow-credentials: true
         max-age: 1800

и добавляю это строка:

antMatchers(HttpMethod.OPTIONS, "/**").permitAll()

но у меня теперь есть эта ошибка:

POST http:192.168.0.120: 8080 / myapp / api / authenticate 403

this Мой метод настройки:

  @Override
  public void configure(HttpSecurity http) throws Exception {
    http
    .csrf()
    .disable()
    .addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
    .exceptionHandling()
    .authenticationEntryPoint(problemSupport)
    .accessDeniedHandler(problemSupport)
    .and()
    .headers()
    .frameOptions()
    .disable()
    .and()
    .sessionManagement()
    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    .and()
    .authorizeRequests()
    .antMatchers("/api/register").permitAll()
    .antMatchers("/api/activate").permitAll()
    .antMatchers("/api/authenticate").permitAll()
    .antMatchers("/api/account/reset-password/init").permitAll()
    .antMatchers("/api/account/reset-password/finish").permitAll()
    .antMatchers("/api/**").authenticated()
    .antMatchers("/management/health").permitAll()
    .antMatchers("/management/info").permitAll() 
    .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN)
    .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
    .and()
    .apply(securityConfigurerAdapter());

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