我试图在另一个应用程序(spring-boot应用程序)上调用REST端点(angularjs).应用程序在以下主机和端口上运行.
http://localhost:8080
http://localhost:50029
我也在使用spring-security
spring-boot应用程序.从HTML应用程序,我可以对REST应用程序进行身份验证,但此后,我仍然无法访问任何REST端点.例如,我有一个如下定义的angularjs服务.
adminServices.factory('AdminService', ['$resource', '$http', 'conf', function($resource, $http, conf) {
var s = {};
s.isAdminLoggedIn = function(data) {
return $http({
method: 'GET',
url: 'http://localhost:8080/api/admin/isloggedin',
withCredentials: true,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
});
};
s.login = function(username, password) {
var u = 'username=' + encodeURI(username);
var p = 'password=' + encodeURI(password);
var r = 'remember_me=1';
var data = u + '&' + p + '&' + r;
return $http({
method: 'POST',
url: 'http://localhost:8080/login',
data: …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个带有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) 我使用的Spring Boot API RESTful由您的实体类自动启动.我从前端Web应用程序中消耗了这个apiRest,但它给了我这个错误:
请求的资源上不存在"Access-Control-Allow-Origin"标头
我正在使用此处指定的applicantion.properties设置CORS配置.
我的基本配置是:
endpoints.cors.allow-credentials=true
endpoints.cors.allowed-origins=*
endpoints.cors.allowed-methods=*
endpoints.cors.allowed-headers=*
Run Code Online (Sandbox Code Playgroud)
我在这些变量中尝试了不同的组合,但仍然无效.有任何想法吗?
我正在尝试在已经设置了基本身份验证的 Spring 启动应用程序中配置 CORS。
我在很多地方搜索过,包括这个答案,它指向官方文档中基于过滤器的 CORS 支持。
到目前为止没有运气。
我的 AJAX 请求就是这样完成的。如果从同一来源http://localhost:8080完成,它就可以工作。
fetch('http://localhost:8080/api/lists', {
headers: {
'Authorization': 'Basic dXNlckB0ZXN0LmNvbToxMjM0NQ=='
}
}
Run Code Online (Sandbox Code Playgroud)
AJAX 请求是从http://localhost:3000的 React 应用程序完成的,所以我尝试了以下 Spring boot CORS 配置:
@Configuration
class MyConfiguration {
@Bean
public FilterRegistrationBean corsFilter()
{
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
// Maybe I can just say "*" for methods and headers
// I just copied these lists from another Dropwizard project
config.setAllowedMethods(Arrays.asList("GET", "PUT", "POST", …
Run Code Online (Sandbox Code Playgroud) 我在春季启动时面临CORS问题.我已经像这样配置了CORS
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
Run Code Online (Sandbox Code Playgroud)
我想这可以启用所有标题和其他内容.
它与GET请求一起出色地工作
$.get("someUrl, function(data, status){
console.log(data[0].latitude);
});
Run Code Online (Sandbox Code Playgroud)
但每当我发出像这样的POST请求
$.ajax({
url: 'someUrl',
type: 'post',
dataType: 'json',
crossDomain: true,
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
},
data: object
});
Run Code Online (Sandbox Code Playgroud)
我得到以下内容
OPTIONS XHR "someUrl" [HTTP/1.1 403 Forbidden 4ms]
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at "someUrl".
(Reason: CORS header 'Access-Control-Allow-Origin' missing).
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我正在开发一个使用 React+Redux 并用于axios
进行 api 调用的应用程序。
这是一个失败的调用示例:
axios.post(`${API_ROOT}${FIND_USER}${currentUserID}`, {
headers: {
'Authorization': token
},
})
.then((response) => {
console.log("Sucess")
})
Run Code Online (Sandbox Code Playgroud)
当我看到的请求网址network
是这样的:
http://domainName:8080/users/findUser/1234
Run Code Online (Sandbox Code Playgroud)
API 调用OPTIONS
本身失败,我从后端收到的错误是
Response for preflight has invalid HTTP status code 403
Run Code Online (Sandbox Code Playgroud)
它永远不会达到POST
。
token
是从 检索到的localstorage
,类似于Bearer eyJhbGci...
。
后端开发人员正在使用 Java 和 Spring 。
我调用 API 的方式是否有问题,或者这个问题应该在后端解决?
通过 Postman 测试时,这个 API 工作得很好。
从 Spring 4 迁移到 Spring 5.1 时,我很难处理 JSONP
Spring 4 为 jsonp 提供 AbstractJsonpResponseBodyAdvice 类
但是, AbstractJsonpResponseBodyAdvice 类在 Spring 5 中消失了。
Spring 5.1 有没有补课???
我正在使用带有OAuth2(版本:4.0.4.RELEASE)和spring(版本:4.3.1.RELEASE)的spring security.
我正在开发Angular的前端,我正在使用grunt connect:dev(http://127.0.0.1:9000).当我尝试通过localhost地址登录时,一切正常,但是从其他地方我收到错误:
"XMLHttpRequest无法加载http:// localhost:8084/oauth/token?client_id = MY_CLIENT_ID.对预检请求的响应未通过访问控制检查:请求的资源上没有"Access-Control-Allow-Origin"标头.因此,不允许来源" http://127.0.0.1:9000 "访问.响应的HTTP状态代码为401."
我在WebMvcConfigurerAdapter(如下所示)中配置了映射(Overrided public void addCorsMappings(CorsRegistry registry)),但它仍然不适用于http://127.0.0.1:9000.
registry.addMapping("/**")
.allowedOrigins("http://127.0.0.1:9000")
.allowedMethods("POST", "OPTIONS", "GET", "DELETE", "PUT")
.allowedHeaders("X-Requested-With,Origin,Content-Type,Accept,Authorization")
.allowCredentials(true).maxAge(3600);
Run Code Online (Sandbox Code Playgroud)
配置基于:https://spring.io/guides/gs/rest-service-cors/
请指出正确的解决方案来解决这个问题.
我在 Spring Boot 应用程序中使用 Spring Security 配置了 JWT 安全性。我有一个问题
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
标头,也称为 CORS。我配置了应用程序,因此每个服务器响应中都存在标头,但一旦 JWT 令牌无效,服务器就会响应 403 错误代码,而没有 Access-Control-Allow-Origin: * 标头。这会导致浏览器将错误消息写入控制台:
无法加载 http://... 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“http://...”。响应的 HTTP 状态代码为 403。
这似乎是错误的,我希望获得 Access-Control-Allow-Origin: * 标头作为响应,即使 JWT 令牌无效且服务器响应带有 403 错误代码。
现在我尝试过的和我的代码。
依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
据我了解,这个问题可能是由过滤器链中的过滤器顺序引起的,我尝试将 JWT JwtAuthenticationFilter 放在 CorsFilter 或 CsrfFilter 之后,创建 CorsConfigurationSource bean。这在https://docs.spring.io/spring-security/site/docs/current/reference/html5/#cors中进行了描述,并在如何在 Spring Boot + Spring Security 应用程序中配置 CORS?和https://github.com/spring-projects/spring-boot/issues/5834,但似乎没有任何帮助
@Configuration
@EnableWebSecurity
public class …
Run Code Online (Sandbox Code Playgroud) 我想用 Spring Authorization Server 项目构建一个授权服务器。现在我想使用 AuthorizationGrantType.PASSWORD。
我根据 Spring Authorization Server 项目的示例开发了一个演示项目。但是,当我尝试使用http://localhost:9000/oauth2/token?grant_type=password&username=user&password=pass(我在 Postman 中使用 client_id 和 client_secret 作为基本身份验证)请求获取令牌时,我收到 403 。
我在这里缺少什么?
依赖项:spring-boot-starter-web、spring-boot-starter-security、spring-security-oauth2-authorization-server(版本:0.2.2)
授权服务器配置类:
import java.security.*;
import java.security.interfaces.*;
import java.util.UUID;
import org.springframework.context.annotation.*;
import org.springframework.security.oauth2.core.*;
import org.springframework.security.oauth2.server.authorization.client.*;
import org.springframework.security.oauth2.server.authorization.config.ProviderSettings;
import com.nimbusds.jose.jwk.RSAKey;
import com.nimbusds.jose.jwk.*;
import com.nimbusds.jose.jwk.source.JWKSource;
import com.nimbusds.jose.proc.SecurityContext;
@Configuration(proxyBeanMethods = false)
public class AuthorizationServerConfig {
@Bean
public RegisteredClientRepository registeredClientRepository() {
RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
.clientId("client1")
.clientSecret("{noop}secret")
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
.authorizationGrantType(AuthorizationGrantType.PASSWORD)
.authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
.build();
return new InMemoryRegisteredClientRepository(registeredClient);
}
@Bean
public ProviderSettings providerSettings() {
return …
Run Code Online (Sandbox Code Playgroud)