Java webapp响应我的登录页面的源代码

时间:2016-10-31 21:23:30

标签: java json spring web-services

我有一个java Web应用程序,它发布一个以JSON格式返回对象的服务,我有另一个java Web应用程序只是通过JSONP调用来使用该服务并显示响应。在我的本地机器上它工作正常,但现在我想在Web环境中测试它(在我的情况下是Layershift),我无法获得JSON对象。我没有在Chrome开发者工具上看到任何错误,但当我查看“响应”标签(在“网络”选项中)时,我会看到应用程序登录页面的源代码。让我告诉你我的代码
带服务的控制器:

@RestController
public class MyController {
@RequestMapping(value="/myservice/get/{somevar}")
public MappingJacksonValue getMyObject (@RequestParam String callback, @PathVariable String somevar, HttpServletRequest request, HttpServletResponse response) {
    MyObject obj = new MyObject();
    //some logic
    MappingJacksonValue value = new MappingJacksonValue(obj);
    value.setJsonpFunction(callback);
    return value;
}

}

用于调用服务的javascript代码:

$.fn.callWithJsonP = function(somevar) {
var url = "/myservice/get/" + somevar + "?callback=myCallback";
$.getJSON(url, function(data) {
    if (data.value.status == "OK") {
        //shows the data contained
    }
});
}

Apache配置(添加以避免CORS错误),存在于两个应用程序中

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Header always unset X-Frame-Options

这在muy本地机器上完美运行(除了Apache,我不在本地使用它),但正如我所说,在Web环境中,我收到了登录页面的源代码。在Headers选项卡中,我可以看到在Apache中添加的标题,以及响应的状态代码是否正常,是否有任何线索关于什么是什么? 恭敬的问候

更新
我已经删除了Apache Web服务器,甚至使用Postman测试了Web服务(意思是没有第二个应用程序),结果仍然相同。我已经尝试为@Controller更改@RestController并返回MyObject的实例(而不是MappingJacksonValue),没有结果,请帮帮我

3 个答案:

答案 0 :(得分:1)

我可能不在这里,但是你有可能有一个servlet过滤器或你的web应用程序配置的其他部分将你的get请求路由到你的登录页面,然后你的REST框架才能将它映射到你的终端?我通常会使用Jersey,所以我不熟悉Spring的RestController,但我认为它做的是类似的事情 - 路由与java代码匹配的URL。如果您看到响应中的登录页面,则听起来有些东西在干扰并试图强制用户在Spring指向您的端点方法之前登录。

答案 1 :(得分:0)

您的服务器中似乎有一个备用设置,可能是为单个页面应用程序配置的。这通常用于使用像angular的路由器一样使用HTML5模式进行路由。

答案 2 :(得分:0)

您正在获取登录页面代码作为响应,因为登录失败并且您被重定向到同一页面。

因此,在首先调用服务之前,您需要进行身份验证,然后通过使用身份验证令牌调用服务..