403禁止删除请求。 Spring Boot Rest API

时间:2019-04-26 08:05:19

标签: spring rest spring-boot http security

所以我在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);
    }

enter image description here

2 个答案:

答案 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"); } }; }

您也可以将映射添加到特定的网址