Получение данных с одного сервера Tomcat на другой сервер Tomcat
Я использую сервер saiku для анализа данных, который выполняется в одном tomcat, и я запускаю мое приложение весенней загрузки в другом tomcat, я хочу получить данные с сервера saiku в мое приложение весенней загрузки для создания диаграммы (то есть) с одного сервера tomcat на другой tomcat server.i получил ошибку, такую как
Вот мой код для получения данных из Сайку в мое приложение Spring boot
<script type="text/javascript" data-ng-hide=true>
var myClient = new SaikuClient({
server: "http://localhost:8080/saiku",
path: "/rest/saiku/embed",
user: "admin",
password: "admin"
});
myClient.execute({
file: "/homes/home:admin/sample_reports/.saiku",
htmlObject: "#saiku2",
render: "chart",
mode: "line",
chartDefinition: {
width: 560,
colors: ['grey','red','blue'],
extensionPoints: {
legend: true,
legendShape: 'circle',
legendSize: {width: '100%'},
legendLabel_textStyle: "#990000",
legendFont: 'normal 11px "Open Sans"'
}
},
zoom: true
});
function displayChart(path, htmlDiv){
myClient.execute({
file: path,
htmlObject: "#"+htmlDiv,
render: "chart",
mode: "line",
chartDefinition: {
width: 560,
colors: ['grey','red','blue'],
extensionPoints: {
legend: true,
legendShape: 'circle',
legendSize: {width: '100%'},
legendLabel_textStyle: "#990000",
legendFont: 'normal 11px "Open Sans"'
}
},
zoom: true
});
}
$(document).ready(function(){
console.log("Hello world")
});
$.get( "http://localhost:8080/saiku/rest/saiku/api/repository?type=saiku,sdb", function( data ) {
console.log(data);
console.log(data.length);
var response = (data);
for(var i=0;i<data.length;i++){
console.log("JSON ==>"+data[i].type);
// get reports only under homes
if(data[i].type=="FOLDER" && data[i].name=="homes"){
console.log("data[i].repoObjects ==>"+data[i].repoObjects)
// for file only we generate the saiku reports
if(data[i].repoObjects && data[i].repoObjects.length>0){
console.log("i am inside"+data[i].repoObjects.length)
var arr = [];
arr = (data[i].repoObjects);
for (var k=0;k<arr.length;k++){
console.log("repo ==>"+arr[k].name);
if(arr[k].name=="home:admin"){
// retrieve all reports under home:admin folder
console.log("repo ==>"+JSON.stringify(arr[k].repoObjects[0].repoObjects));
// arr[k] is the home:admin folder. iterate all the files
for(var z=0;z<arr[k].repoObjects.length;z++){
// this is now the list of files and folders under homes/home:admin
if(arr[k].repoObjects[z]){
var folderObjects =new Array(arr[k].repoObjects[z].repoObjects);
console.log(arr[k].repoObjects[z].repoObjects.length)
for(var x=0;x<arr[k].repoObjects[z].repoObjects.length;x++){
console.log(x)
if(arr[k].repoObjects[z].repoObjects[x]){
console.log(arr[k].repoObjects[z].repoObjects[x].path)
displayChart(arr[k].repoObjects[z].repoObjects[x].path,"saiku"+x);
}
}
}
}
}
}
}
}
}
});
</script>
и моя ошибка
XMLHttpRequest cannot load http://localhost:8080/saiku/rest/saiku/embed/export/saiku/json?formatter=fl…ned&file=%2Fhomes%2Fhome%3Aadmin%2Fsample_reports%2F.saiku&_=1470641532009. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access. The response had HTTP status code 401
2 ответа
Я никогда не использовал сервер Saiku, но, возможно, я смогу дать вам общее представление о том, почему происходит эта ошибка.
Вы должны либо отключить Access-Control, либо реализовать его правильно.
Здесь есть обширное руководство по правильной реализации функции для Spring: https://spring.io/guides/gs/rest-service-cors/
Также вам следует поискать, что такое "Обмен ресурсами между источниками" и зачем это нужно, здесь: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
Если ваш класс @SpringBootApplication расширяет WebMvcAutoConfigurationAdapter, то вы можете отключить CORS следующим образом:
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
Вы также можете отключить CORS непосредственно в Tomcat: http://enable-cors.org/server_tomcat.html
Но прежде чем делать это, пожалуйста, ознакомьтесь с CORS и получите представление о том, зачем это нужно и каковы последствия его отключения.
Вам нужно использовать API Сайку отдых для входа в систему. Например:
$.post (" http://localhost:8080/saiku/rest/saiku/session/", {имя пользователя: "admin", пароль: "admin" });
Проверьте это: https://groups.google.com/a/saiku.meteorite.bi/forum/
В случае, если saiku запущен на другом tomcat, вы можете использовать CorsFilter в saiku tomcat web.xml
Пользователь Cors тщательно...