Angular 2&离子2 http请求,带有基本身份验证错误

时间:2017-05-02 15:09:50

标签: rest angular http typescript ionic-framework

我在离子2应用程序中使用Angular 2 http get请求时遇到了一些问题。

事实上我有一个网站(由Jalios CMS制作),目前正在localhost:8080上运行Apache tomcat,我想通过RESTful Web服务从我的离子应用程序访问数据。要访问该网站,用户需要登录,并且他们的密码可以包含特殊的字符,如@,#。:?

当我使用cURL命令时,我可以毫无问题地访问数据。数据以xml格式返回。

curl -u username:p@ssword http://localhost:8080/jcms/rest/data/Article

然而,在我的离子2应用程序中,我有以下错误:

  
      
  • OPTIONS http:/ / localhost:8080 / jcms / rest / data / Article 401(Non-Autoris%E9)。 polyfills.js:3

  •   
  • XMLHttpRequest无法加载http:// localhost:8080 / jcms / rest / data / Article。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许来源'http:/ / localhost:8100'访问。响应具有HTTP状态代码401.(索引):1

  •   
  • 错误响应{_body:ProgressEvent,status:0,ok:false,statusText:“”,headers:Headers ...}。 core.es5.js:1084

  •   

我的http提供商: rest-service.ts

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class RestService {
  constructor(public http: Http) {
    console.log('Hello RestService Provider');
  }
  httpGet(username: string, password: string, resource: string){
    let url = 'http://localhost:8080/jcms/rest/data/' + resource;
    let headers: Headers = new Headers();
    headers.append("Authorization", "Basic " + btoa(username + ":" + password));
    return this.http.get(url, {headers: headers});
  }
}

我的离子页面(组件): home.ts

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {RestService} from "../../providers/rest-service";
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  result: Array<any>;
  constructor(public navCtrl: NavController, private  restService: RestService) {
    this.restServiceGet();
  }

  restServiceGet(){
    this.restService.httpGet('username', 'p@ssword', 'Article')
        .map(res => res.json())
        .subscribe(data => this.result = data);
  }
}

通常所有都已在app.module.ts文件中正确导入。我还尝试通过URL编码更改特殊字符(@ 40为%),并直接用基本64等效的用户名替换btoa:p @ assword。

你能帮我纠正这个错误吗?特别是401未经授权,因为我理解为什么会发生这种情况,而我用基本的身份验证来实现标题。我的错误在哪里?

谢谢

0 个答案:

没有答案