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



我有一个java web应用程序,它发布了一个以JSON格式返回对象的服务,我有另一个java web应用程序只是通过JSONP调用消费该服务并显示响应。在我的本地机器上,它工作得很好,但现在我想在web环境中测试它(在我的情况下是Layershift),我无法获得JSON对象。我没有看到Chrome开发人员工具上的任何错误,但是当我查看响应选项卡(在网络选项中)时,我看到了我的应用程序登录页面的源代码。让我给你看看我的代码
带有service的控制器:

@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

这在许多本地机器上都可以完美地工作(除了Apache,我不在本地使用它),但正如我所说,在web环境中,我收到了登录页面的源代码。在header选项卡中,我可以看到Apache中添加的header,响应的状态码是OK的,关于发生了什么事情的任何线索?
亲切的问候

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

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

似乎您在服务器中设置了回退,可能是为单页应用程序配置的。这通常用于HTML5模式下的路由,比如使用angular的路由器。

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

所以在调用服务之前,首先需要进行身份验证,然后通过使用身份验证令牌调用服务。

最新更新