相关疑难解决方法(0)

CORS弹簧靴和angularjs无法正常工作

我试图在另一个应用程序(spring-boot应用程序)上调用REST端点(angularjs).应用程序在以下主机和端口上运行.

  • REST应用程序,使用spring boot, http://localhost:8080
  • HTML应用程序,使用angularjs, http://localhost:50029

我也在使用spring-securityspring-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 spring-mvc cors angularjs spring-boot

71
推荐指数
7
解决办法
12万
查看次数

Spring Data Rest和Cors

我正在开发一个带有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)

java spring spring-mvc cors spring-data-rest

53
推荐指数
4
解决办法
5万
查看次数

Spring Boot通过application.properties启用CORS

我使用的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)

我在这些变量中尝试了不同的组合,但仍然无效.有任何想法吗?

cors spring-boot

16
推荐指数
5
解决办法
3万
查看次数

如何在 Spring Boot 中配置 CORS 和基本授权?

我正在尝试在已经设置了基本身份验证的 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)

security ajax basic-authentication cors spring-boot

9
推荐指数
2
解决办法
1万
查看次数

Spring Boot和CORS

我在春季启动时面临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)

我该如何解决这个问题?

cors spring-boot

8
推荐指数
1
解决办法
8746
查看次数

axios 403 禁止 OPTIONS 请求

我正在开发一个使用 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 工作得很好。

java reactjs redux axios create-react-app

6
推荐指数
1
解决办法
9779
查看次数

如何处理 JSONP (Spring Framework 5.1)

从 Spring 4 迁移到 Spring 5.1 时,我很难处理 JSONP

Spring 4 为 jsonp 提供 AbstractJsonpResponseBodyAdvice 类

但是, AbstractJsonpResponseBodyAdvice 类在 Spring 5 中消失了。

Spring 5.1 有没有补课???

spring

5
推荐指数
1
解决办法
2573
查看次数

Spring Security CORS过滤器无法正常工作

我正在使用带有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/

请指出正确的解决方案来解决这个问题.

java spring spring-security cors angularjs

4
推荐指数
2
解决办法
5991
查看次数

Spring security Access-Control-Allow-Origin: * (CORS) 无效 JWT 令牌问题

我在 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)

java spring-security jwt spring-boot microservices

4
推荐指数
1
解决办法
4507
查看次数

使用 AuthorizationGrantType.PASSWORD 的 Spring 授权服务器

我想用 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)

spring-security spring-security-oauth2

4
推荐指数
1
解决办法
7556
查看次数