我有一个非常简单的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方法不允许
如果我从应用程序中删除安全启动器,它可以正常工作。这让我相信安全配置是个问题。但我无法弄清楚如何。
答案 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
,也会发生这种情况。看起来很反直觉,但这是默认情况下的作用(根据我的经验)。