java - 预检响应在 Angular 4 和 Spring Boot (RestAPI) 应用程序中具有无效的 HTTP 状态代码 403

标签 java spring angular rest spring-boot

我正在使用 Angular-4 创建前端应用程序,使用 spring boot(RestAPI)、JPA、MySQL 数据库创建后端应用程序。 我成功地能够从后端检索/获取存储的数据到前端,但是在将数据从前端发布到后端时出现错误,如下所示: “预检响应具有无效的 HTTP 状态代码 403”。

<小时/>

前端 Angular 代码的代码片段:

myFoo(productData : Product) : Observable<any>{

   let headers = new Headers();
     headers.append( 'Content-Type', 'application/json' );
     let myOptions = new RequestOptions({ headers: headers });

    return this._http
      .post("http://localhost:8081/..(URI)../productslist",productData,myOptions)
      .map( (resp : Response) => resp.json() )

}

其中从 Controller 类传递到上述方法参数的productData是对象类型:

productData : any =  {
      price: 3500,
      productavaliabledate: "March 13, 2018",
      productcode: "GND-124",
      productid: 6,
      productimage: "https://i.imgur.com/sJUpSpt.jpg",
      productname: "dummy1",
      productrating: 3
      }
<小时/>

后端 Spring RestAPI 代码的代码片段是:

 @RestController
 public class OnlineShoppingController {

    @Autowired
    private ProductService productService;

    @RequestMapping(path="/productslist",method =RequestMethod.POST)
    public Product createProduct(@Valid @RequestBody Product product) {
        return productService.createProduct(product);
    }

    }

其中 Product 是 dto/Entity 对象,即:

@Entity
@Table(name="product_table")
public class Product {
    @Id

    @Column(name="productid", columnDefinition="INT(100)")
    private int  productid;

    @Column(name="productname")
    private String   productname;

    @Column(name="productcode")
    private String    productcode;

    @Column(name="productavaliabledate")
    private String  productavaliabledate;

    @Column(name="price" , columnDefinition="INT(100)")
    private int  price;

    @Column(name="productrating",  columnDefinition="INT(50)")
    private int  productrating;

    @Column(name="productimage")
    private String   productimage;

    //getter,setter,constructor using field are also provided
    }

最佳答案

这是Spring Boot配置问题 不是Angular应用程序。403 Forbidden状态意味着: 响应客户端对网页的请求,或者可能表明可以到达服务器并处理该请求,但服务器拒绝采取任何进一步的操作。

最后,我添加了一个 AppConfig 类,它扩展了 WebMvcConfigurerAdapter 并重写了 addCorsMappings() 方法,以便允许我访问所有 HTTP 方法请求。

AppConfig.java-

@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {


    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
            }
        };
    }
}

在我的 application.properties 文件中,我禁用了 springs basic security ie-

security.basic.enabled=false

感谢您对此问题的所有建议和意见。

关于java - 预检响应在 Angular 4 和 Spring Boot (RestAPI) 应用程序中具有无效的 HTTP 状态代码 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48621560/

相关文章:

java - 从控制台读取字符、字节和字符串

java - 帮助搜索二维数组 (Java)

spring - Hibernate SAP 集成

java - Spring中 Autowiring 构造函数中的@PersistenceContext

javascript - 创建没有 Angular ui 路由器的多步表单

java - 如何找到与根求解器一起使用的最小值/最大值?

java - 从枚举值生成数组

java - Spring - Controller 当前页面丢失

javascript - 如何在 ag-grid 的事件方法中使用 javascript 默认事件对象

Angular :替换 url 中的段