我正在开发一个带有Rest接口和dart前端的Spring Boot应用程序.
XMLHttpRequest确实执行一个完全正确处理的OPTIONS请求.在此之后,发出最终的GET("/ products")请求并失败:
请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:63343 ",因此没有允许访问.
经过一些调试后,我发现了以下内容:为RepositoryRestHandlerMapping之外的所有子类填充了AbstractHandlerMapping.corsConfiguration.在RepositoryRestHandlerMapping中,没有corsConfiguration在创建时存在/设置,因此它不会被识别为cors路径/资源.
=>没有连接CORS标头
这可能是问题吗?我怎么设置它?
配置类:
@Configuration
public class RestConfiguration extends RepositoryRestMvcConfiguration {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowCredentials(false).allowedOrigins("*").allowedMethods("PUT", "POST", "GET", "OPTIONS", "DELETE").exposedHeaders("Authorization", "Content-Type");
}
...
}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试设置每个注释的Cors:
@CrossOrigin( methods = RequestMethod.GET, allowCredentials = "false")
public interface ProductRepository extends CrudRepository<Product, String> {
}
Run Code Online (Sandbox Code Playgroud)
原始请求标头:
GET /products HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
authorization: Basic dXNlcjpwYXNzd29yZA==
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.130 Chrome/43.0.2357.130 Safari/537.36
Content-Type: application/json
Accept: */*
Referer: …Run Code Online (Sandbox Code Playgroud) 我正在评估某些IAM产品,并使用Keycloak的RealmResourceProvider遇到了CORS问题。目标是编写一个能够使用Keycloak的REST接口创建用户和管理组的angular4客户端。
服务器端:
我试图用RealmResourceProvider接口实现Rest接口,以便尽可能容易地访问Realm和User Data。我遵循了Beercloak示例(github.com/dteleguin/beercloak)并使其正常运行,但是没有自定义主题(仅REST资源)。我自己的应用程序打包为Jar。我设法通过REST Client调用了这个Facade,并且它起作用了(先调用localhost:8080 / auth / realms / master / protocol / openid-connect / token,然后将令牌填充到Authorization-Header中)。
keycloak-configuration 但是,如果我通过浏览器对其进行测试,则需要启用Cross-Origin-Ressource-Sharing。为此,我在服务器应用程序的“ keycloak.json”中添加了“ enable-cors”属性:
{
"realm": "master",
"auth-server-url": "http://localhost:8080/auth",
"ssl-required": "external",
"resource": "pharmacyRessource",
"public-client": true,
"enable-cors": true
}
Run Code Online (Sandbox Code Playgroud)
另外,我在Keycloak Admin中创建了一个客户端。 客户端配置
客户端和问题:
角度客户端使用github.com/mohuk/ng2-keycloak/blob/master/src/keycloak.service.ts中的Mohuks ng2-keycloak服务获取访问令牌。- 工作正常。但是如果我对我的资源进行GET请求,则预检失败是因为缺少Access-Control-Allow-Origin标头: 错误401 用于初始化javascript中的keycloak-client的keycloak.json如下所示:
{
"realm": "master",
"auth-server-url": "http://localhost:8080/auth",
"ssl-required": "external",
"resource": "pharmacyRessource",
"public-client": true
}
Run Code Online (Sandbox Code Playgroud)
我失败的解决方案:
我的测试环境是来自hub.docker.com/r/jboss/keycloak/的官方Docker容器