每当我尝试使用axios发送删除endpoint的请求时,都会出现以下错误:
通过CORS策略阻止从源http://localhost:3000在http://localhost:8080/api/payment_card/delete/1234123412343433处访问XMLHttpRequest:对预检请求的响应未通过权限改造检查:请求的资源上不存在“Access-Control-Allo-Origin”标头
Axios 请求构建如下:
.delete(
"http://localhost:8080/api/payment_card/delete/" + selectedCardId ,
{
headers: {
Authorization: `Bearer ${token}`,
"Access-Control-Allow-Origin": "**"
},
}
)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});```
My java WebSecurityConfig stays as follow:
Override protected void configure(HttpSecurity http) throws Exception {
http = http.cors().and().csrf().disable();
http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues());
// Set session management to stateless
http = http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and();
// Set unauthorized requests exception handler
http = http
.exceptionHandling()
.authenticationEntryPoint(new AuthException())
.and();
http.addFilterBefore(requestFilter, UsernamePasswordAuthenticationFilter.class);
}
在控制器中,映射是:
public ResponseEntity<PaymentCard> deletePaymentCard(@PathVariable Long cardNumber) {
PaymentCard pCard = paymentCardService.deletePaymentCard(cardNumber);
return new ResponseEntity<>(pCard, HttpStatus.OK);
}
我尝试了许多解决方案,比如添加@CrossOrigin注释,制作CorsFilter,但似乎没有任何帮助。最终,我在控制器中将DeleteMap更改为GetMap,但我觉得超文本传输协议策略可以随时将我拘留:(感谢您的时间和提前帮助。
我可以有一个用以下方法实现过滤器的类
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
final HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
response.setHeader("Access-Control-Max-Age", "3600");
if (HttpMethod.OPTIONS.name().equalsIgnoreCase(((HttpServletRequest) req).getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
corscoConfiguration。applyPermitDefaultValues()
不允许假设的所有方法,只允许以下方法:GET、HEAD和POST。
要允许DELETE方法,您可以使用以下代码:
http.cors().configurationSource(c -> {
CorsConfiguration corsCfg = new CorsConfiguration();
// All origins, or specify the origins you need
corsCfg.addAllowedOriginPattern( "*" );
// If you really want to allow all methods
corsCfg.addAllowedMethod( CorsConfiguration.ALL );
// If you want to allow specific methods only
// corsCfg.addAllowedMethod( HttpMethod.GET );
// corsCfg.addAllowedMethod( HttpMethod.DELETE );
// ...
});
如果显式配置corscoConfiguration
,我建议不要使用applyPermitDefaultValues()
,而是显式指定所有需要的方法。然后,没有人需要记住<code>applyPermitDefaultValues()</code>到底启用了哪些方法,这样的代码更容易理解。
问题内容: 我目前正在尝试混淆一系列库。我的基础库包含几个使用类型参数的类和方法,由于Proguard混淆消除了类型参数,其他代码无法使用我的基础库。消除混淆消除了这些问题。我已经阅读了所有ProGuard使用文档,示例和故障排除信息,但无法找到有关如何处理类型参数或ProGuard剥离类型参数的任何文档。 构造函数类型参数问题: 库1包含以下类: 库2包含几个扩展上述类的类,但构造函数会引发编译
假设一个线程在条件变量上阻塞: 互斥锁被解锁,尝试锁定互斥锁的其他线程被解锁: 同时还有另一个线程正在等待获取关键部分的所有权: 现在的问题是:调用pthread_cond_signal()时,是否保证pthread_cond_wait()[1]将在pthread_mutex_lock()[2]之前解除阻塞? POSIX规范似乎没有说明这种情况。
问题内容: 因此,我有了这个Go http处理程序,该处理程序将一些POST内容存储到数据存储中,并检索其他一些信息作为响应。在后端,我使用: 在我的firefox OS应用程序中,我使用: 传入的部分都一直如此。但是,我的回复被阻止了。给我以下信息: 我尝试了许多其他操作,但是无法从服务器获得响应。但是,当我将Go POST方法更改为GET并通过浏览器访问该页面时,我得到的数据太糟糕了。我无法真
问题内容: 是否可以使用angularjs拦截器阻止请求? 问题答案: 在1.1.5及更高版本中,您可以使用配置对象的’timeout’属性。 从文档中: 超时– {number | Promise} –超时(以毫秒为单位),或承诺应在解决后中止请求。 简单的例子:
所以我有java的后端和Angular的前端。当我向我的spring boot restendpoint发送删除请求时,我得到了403代码。Angular发送第一个选项请求,并返回403,因此不会发生删除请求。另外,获取和发布工作正常。 我试过禁用csrf,但没有成功。我也在我的浏览器中使用它,所以我不应该禁用它。在soapUI中,DELETE可以正常工作。 这是我的安全配置类 我想做这个删除请求