405不允许POST的方法

时间:2015-11-13 18:41:17

标签: spring spring-security spring-boot

我有一个非常简单的Spring启动应用程序,它由以下代码保护:

http.authorizeRequests()
        .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
        .and()
          .formLogin().loginPage("/login").failureUrl("/login?error")
          .usernameParameter("username").passwordParameter("password")
        .and()
          .logout().logoutSuccessUrl("/login?logout")
        .and()
          .exceptionHandling().accessDeniedPage("/403");

这个想法是确保" admin"一部分。它公开了一个REST API。 问题是所有的POSTS返回

  

405方法不允许

如果我从应用程序中删除安全启动器,它可以正常工作。这让我相信安全配置是个问题。但我无法弄清楚如何。

2 个答案:

答案 0 :(得分:10)

这应该很容易。

如果启用了CSRF,则不允许POST和PUT请求,并且弹出启动默认启用这些请求。

只需将其添加到您的配置代码中:

.csrf().disable()

即:

http.
.csrf().disable().
authorizeRequests()
        .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
        .and()
          .formLogin().loginPage("/login").failureUrl("/login?error")
          .usernameParameter("username").passwordParameter("password")
        .and()
          .logout().logoutSuccessUrl("/login?logout")
        .and()
          .exceptionHandling().accessDeniedPage("/403");

如果您需要启用CSRF,请参阅文档:

http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#csrf-configure

答案 1 :(得分:0)

如果使用Spring Security SAML扩展程序并且SAMLUserDetailsService返回UsernameNotFoundException,也会发生这种情况。看起来很反直觉,但这是默认情况下的作用(根据我的经验)。