我在Postman中尝试PutMapping
我的API时得到了“无效的CORS请求”。但它在“POST”和“GET”Map中工作正常。
为什么它不适用于“PUT”操作?
我的Sping Boot 版本:2.0
这是我的配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/h2-console/**/**").permitAll()
.antMatchers(HttpMethod.GET,"/user/get-request").permitAll()
.antMatchers(HttpMethod.POST,"/user/post-request").permitAll()
.antMatchers(HttpMethod.PUT,"/user/put-request").permitAll()
.and()
.exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager(), jwtUserDetailService));
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*").exposedHeaders("Authorization");
}
};
}
这是我的控制器:
@RestController
@RequestMapping("/user")
public class UserController {
@PutMapping("/put-request")
public void doResetPassword(@RequestBody String password) {
System.out.println("PUT MAPPING");
}
@PostMapping("/post-request")
public void doResetPassword(@RequestBody String password) {
System.out.println("POST MAPPING");
}
@GetMapping("/get-request")
public void doResetPassword() {
System.out.println("GET MAPPING");
}
}
6条答案
按热度按时间yvfmudvl1#
uemypmqf2#
我通过添加这个bean来允许cors请求。你可以根据需要配置setAllowedHeaders()和setExposedHeaders()。
另外,我把这一行添加到我的控制器;
如果您的控制器需要处理动态OPTION请求,您可以将此方法添加到您的控制器。您可以通过端点配置该值。
tvokkenx3#
如果您使用的是IIS服务器,这是一个问题,与WebDAVModule似乎阻止PUT和DELETE方法默认!
我真的希望没有人会因为这个而痛苦!=]
字体:https://mozartec.com/asp-net-core-error-405-methods-not-allowed-for-put-and-delete-requests-when-hosted-on-iis/
ylamdve64#
在Spring中,我使用Kotlin做了以下事情:
m4pnthwp5#
我只想补充三点。
1.接受的答案和下面的答案是错误的CORS方法。如果您试图配置CORS,这意味着您正在尝试使您的API只能由您知道的一些客户端访问。
使API可被任何客户端访问。如果这是您想要的,您可以只执行以下操作,而不需要配置另一个bean
1.问题中的问题可能会发生在你允许使用
http
的origin并使用https
执行请求时。所以要注意这两个是不同的。1.下面是一个工作配置
g52tjvyc6#
我使用的是Spring Security和Sping Boot 2.1.2。在我的具体案例中,PUT调用是在我从CorsConfigurationSource bean中显式声明setAllowedMethods()中的“PUT”方法后工作的。可以根据应用程序的行为选择头。