使用 Apache Webserver 代理 Angular 和 Apache Sling 服务器

问题描述

出于开发目的,我配置了我的 Apache Web 服务器来处理来自 Angular 节点服务器或托管在 docker 容器中的 Apache Sling 实例的请求:

Apache 虚拟主机配置:

<VirtualHost admin.my-arcanite.com:80>

        ServerName admin.my-arcanite.com
        DocumentRoot "/home/tadams/Projects/angular_projects/cms-coffinite"

        <Directory "/home/tadams/Projects/angular_projects/cms-coffinite">
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

        <Directory "/">
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>


        Header always set Access-Control-Allow-Origin "*"
        Header always set Access-Control-Allow-Credentials "true"
        Header always set Access-Control-Allow-Headers "Origin,X-Requested-With,Content-Type,Accept,Authorization"
        Header always set Access-Control-Allow-Methods "POST,GET,PUT,DELETE,PATCH,OPTIONS"
        Header always set Access-Control-Expose-Headers "Content-Security-Policy,Location"


        ProxyPass               /content        http://localhost:49174/content
        ProxyPass               /system         http://localhost:49174/system
        ProxyPass               /               http://localhost:4200/

</VirtualHost>

我从禁用主机检查开始的 Angular 服务器。当我现在尝试从 Angular http 客户端调用 Apache Sling 的登录 URL 时,我总是收到 Firefox 中禁止错误 403:

Object { 
    headers: {…},status: 403,statusText: "Forbidden",url: "http://admin.my-arcanite.com/system/login/j_security_check",ok: false,name: "HttpErrorResponse",message: "Http failure response for http://admin.my-arcanite.com/system/login/j_security_check: 403 Forbidden",error: null }

在 Angular 中,我使用以下命令调用吊索登录

const BASE_URL = 'http://admin.my-arcanite.com/system/login/j_security_check';
const headers = new HttpHeaders();
headers.append('Content-Type','application/x-www-form-urlencoded');
const body = new URLSearchParams();
body.append('j_username',username);
body.append('j_password',password);
body.append('j_validate','true');
return this.http.post(BASE_URL,body,{headers,observe: 'response',responseType: 'text'});

我现在不确定这个设置中的错误在哪里,Apache conf。或者我从 Angular 调用它的方式,有人能指出我正确的方向。

如果我确实从 Insomnia rest 客户端向 http://admin.my-arcanite.com/system/login/j_security_check 发送登录帖子,Apache2 的设置似乎可以正常工作,并且登录尝试也会按预期响应 cookie 标头。

在 Angular 中使用 proxy.json 也没有成功,这里已经完全没有提供 cors 预检。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)