gpt4 book ai didi

spring-boot - @WebMvcTest 使用安全返回 401 状态而不是重定向

转载 作者:行者123 更新时间:2023-12-02 04:24:19 32 4
gpt4 key购买 nike

我正在使用 Spring Security 为一个简单的 Controller 编写测试。启用了登录表单。当用户输入 /books URL 时,他们将被重定向到登录页面。这就是我在网络控制台中看到的。 /books 上的 GET 返回 302,后跟 /login 和状态 200。

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = BookController.class)
public class BookControllerIT {

@Autowired
private MockMvc mockMvc;

// ... some mock beans

@Test
public void shouldReturnUnauthorizedStatus() throws Exception {
mockMvc.perform(get("/books")).andExpect(status().is3xxRedirection());
}
}

这是我的安全配置:

@Configuration
@EnableWebSecurity
public class BasicSecurityConfiguration extends WebSecurityConfigurerAdapter {

private DataSource dataSource;
private BCryptPasswordEncoder encoder;

@Autowired
public BasicSecurityConfiguration(@Qualifier("security.datasource") DataSource dataSource, BCryptPasswordEncoder encoder) {
this.dataSource = dataSource;
this.encoder = encoder;
}

@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().antMatchers("/").permitAll()
.and()
.authorizeRequests().antMatchers("/h2-console/**").permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
.and()
.httpBasic()
.and()
.csrf().disable()
.headers().frameOptions().disable();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(encoder);
}
}

为什么我的测试没有像下面的浏览器那样重定向? enter image description here

我尝试在测试中添加 @Import(BasicSecurityConfiguration.class) 但我仍然得到 401。

这是我使用的 Spring Boot 版本:springBootVersion = '2.1.0.M2'

最佳答案

我遇到了一个讨论 here关于当客户端尝试访问 protected 资源时应该返回什么状态。应该是客户端错误还是重定向。最让我信服的答案是服务器应该返回 401/403。

我检查了 MockMvc 在那种情况下做了什么。在 FilterSecurityInterceptor 中过滤期间,抛出 AccessDeniedExceptionExceptionTranslationFilterhandleSpringSecurityException 中处理它,并且确实将响应状态设置为 401 .

我正在修改我的测试以断言服务器返回 4xx 状态。

关于spring-boot - @WebMvcTest 使用安全返回 401 状态而不是重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106276/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com