我收到POST端点的错误403 Forbidden,其他端点正在按预期工作。
我有4个端点,我需要重现身份验证行为:
GET \users - no authentication
GET \details\1 - needs authentication
GET \users\1 needs authentication
POST \users\1 needs authentication
我的配置类:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(org.springframework.security
.crypto.password.NoOpPasswordEncoder.getInstance())
.withUser("user").password("pwd")
.roles("USER").and().withUser("admin").password("pwd")
.roles("USER", "ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers( "/users").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
Maven依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
答案 0 :(得分:1)
我怀疑是csrf
引起的问题。
如果您不使用csrf
,但默认情况下仍将启用它。请参见Cross Site Request Forgery (CSRF),因此请尝试禁用csrf
保护。
如果您在安全性中启用了CSRF,则需要更新您的帖子请求以包括一些其他信息。它解释了为什么GET有效但POST无效的原因。
根据您的情况,尝试按如下所示禁用它,并查看它是否可以解决问题。
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable();
}
答案 1 :(得分:1)
我发现this有用
http.csrf().disable().cors().and().....