我已经安装并配置了keycloak服务器。我的应用程序由部署在apache HTTP服务器上的单个html页面组成,该服务器与keycloak服务器在同一台机器上。此HTML页面执行REST json ajax调用来获取数据。HTML页面使用JS适配器进行保护,rest服务使用spring boot应用程序进行公开,并使用spring boot适配器进行保护。
Keycloak只有一个客户端,并为其配置了客户端适配器。
现在,js适配器可以完美地工作在文件中。它重定向到登录页面,登录后,它重定向到所需的页面。Spring boot适配器也工作正常。当我们对web服务执行GET时,它将重定向到登录页面,并且在输入凭据之后,web服务将提供响应。
问题是,当HTML页面使用AJAX调用此web服务时,它会失败。
因此,当我在key cloak服务器中输入凭据并重定向到html页面时,html页面无法进行ajax调用。响应码是302,它被重定向到keycloak auth服务(在ajax调用期间)。
我的问题是:
*如果我的html页面和just风格的web服务使用同一个keycloak客户端,我不需要登录一次吗?*如果(html和webservice )都是单独认证的,并且都是工作文件,那么为什么我只登录到html页面就不能工作了?
*有没有不同的方法来克服这个问题?
发布于 2015-05-22 12:58:18
解决方案非常简单。我不得不使用jsonp而不是json ajax请求。
我在ajax调用中添加了dataType:" jsonp“,并使用Spring4建议在服务器端支持jsonp。
建议代码:
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback");
}
}Javascript代码:
$(document).ready(function() {
$.ajax({
url: "http://localhost:8081/hello-world/",
dataType:"jsonp"
}).then(function(data) {
$('.greeting-id').append(data.id);
$('.greeting-content').append(data.content);
});});
关注Link对我帮助很大:
Why is jquery's .ajax() method not sending my session cookie?
https://stackoverflow.com/questions/30344113
复制相似问题