KeyClope自定义REST终结点中的CORS错误

KeyClope自定义REST终结点中的CORS错误,cors,keycloak,Cors,Keycloak,因此,我在这里阅读了有关如何扩展服务器的文档: 并遵循本教程: 我正在尝试通过自定义属性获取用户,到目前为止,当我尝试使用Postman时,它仍然有效。但是,当我尝试从angular应用程序发送get请求时,它返回了CORS错误:请求的资源上不存在“Access Control Allow Origin”头。我尝试添加@CrossOrigin注释,将localhost作为原点,但没有成功。我还尝试在以*或localhost作为源的响应上手动设置标题,如下所示: @GET @路径(“用户/按

因此,我在这里阅读了有关如何扩展服务器的文档:

并遵循本教程:

我正在尝试通过自定义属性获取用户,到目前为止,当我尝试使用Postman时,它仍然有效。但是,当我尝试从angular应用程序发送get请求时,它返回了CORS错误:请求的资源上不存在“Access Control Allow Origin”头。我尝试添加@CrossOrigin注释,将localhost作为原点,但没有成功。我还尝试在以*或localhost作为源的响应上手动设置标题,如下所示:


@GET
@路径(“用户/按属性搜索”)
@诺卡奇
@产生({MediaType.APPLICATION_JSON})
@编码的
公共响应searchUsersByAttribute(@DefaultValue(searchBy)@QueryParam(“属性”)字符串属性,@QueryParam(“值”)字符串值){
List List=session.users().searchForUserByUserAttribute(属性、值、session.getContext().getRealm()).stream().map(e->userMapper.MapToUserTo(e)).collect(Collectors.toList());
返回响应。状态(200)
.header(“访问控制公开头”、“*”)
.header(“访问控制允许原点”、“*”)
.header(“访问控制允许标头”、“来源、内容类型、接受、授权”)
.header(“访问控制允许方法”、“获取、发布、放置、删除、选项、HEAD”)
.实体(清单)
.build();
}


但它也不起作用。有没有办法在端点或服务器上配置CORS?

您需要响应@solveMe提到的飞行前选项请求

@OPTIONS
@Path("{any:.*}")
public Response preflight() {
    HttpRequest request = session.getContext().getContextObject(HttpRequest.class);
    return Cors.add(request, Response.ok()).auth().preflight().build();
}

会话是密钥隐藏会话。Cors类位于org.keydape.services.resources中

我猜浏览器首先会尝试执行Cors飞行前请求,而您的端点不会处理该请求。请参阅互联网上的JAX-RS飞行前CORS处理示例。在钥匙斗篷资源中,你可以找到一个。尝试使用“Cors”标记按类名搜索。非常感谢!这起作用了。
@OPTIONS
@Path("{any:.*}")
public Response preflight() {
    HttpRequest request = session.getContext().getContextObject(HttpRequest.class);
    return Cors.add(request, Response.ok()).auth().preflight().build();
}