所以我在Java中有后端,在Angular中有前端。当我发送删除请求到我的spring boot rest端点即时消息获取403代码。 Angular发送第一个OPTIONS请求,并返回此403,因此不会发生DELETE请求。 另外,GET和POST效果很好。
我已经尝试禁用csrf,但是它没有被唤醒。我也在浏览器中使用它,所以我不应该禁用它。在soapUI中,DELETE可以正常工作。
这是我的安全配置类
@Configuration
@EnableWebSecurity
public class AuthConfig extends WebSecurityConfigurerAdapter {
@Value(value = "${auth0.apiAudience}")
private String audience;
@Value(value = "${auth0.issuer}")
private String issuer;
@Bean
CorsConfigurationSource corsConfigurationSource() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
JwtWebSecurityConfigurer
.forRS256(audience, issuer)
.configure(http)
.cors()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET,"/public").permitAll()
.antMatchers(HttpMethod.GET,"/private/**").authenticated()
.antMatchers(HttpMethod.GET,"/private-scoped").hasAuthority("read:posts");
}
}
我要执行此删除请求。
@PostMapping("/private/post/{id}/like")
public void likePostById(@PathVariable Long id){
postService.likePostById(id);
}
@DeleteMapping("/private/post/{id}/like")
public void unlikePostById(@PathVariable Long id){
postService.unlikePostById(id);
}
答案 0 :(得分:0)
我认为您将请求类型限制为
HttpMethod.GET
在您的antMatchers中。
删除此参数或添加另一个antiMatcher,例如:
.antMatchers(HttpMethod.DELETE,"your delete url").permitAll()
答案 1 :(得分:0)
如果您使用的是Spring Boot 2,则可以将其用作:
@Bean
public WebMvcConfigurer corsConfigurer()
{
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("GET", "PUT", "POST", "DELETE",
"PATCH", "OPTIONS", "HEAD");
}
};
}
您也可以将映射添加到特定的网址