gpt4 book ai didi

Spring 使用带有 CORS 过滤器的 MockMvc 测试

转载 作者:行者123 更新时间:2023-12-02 22:08:20 24 4
gpt4 key购买 nike

我正在尝试运行基本的 MVC 测试

@Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello World")));
}

但是,这总是会导致java.lang.IllegalArgumentException: header 值不能为空我发现如果我停用 CORS 过滤器,测试将正常进行,不会出现错误。

我的SimpleCORSFilter

@Component
public class SimpleCORSFilter implements Filter {

private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class);

public SimpleCORSFilter() {
log.info("SimpleCORSFilter init");
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
//...
chain.doFilter(req, res);
}

}

我的安全配置的一部分

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
UserDetailsServiceImp userDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(new SimpleCORSFilter(),UsernamePasswordAuthenticationFilter.class);
}
}

只有当我删除 SimpleCORSFilter 中的 @Component 并删除 SecurityConfig 中的 .addFilterBefore(new SimpleCORS...) 行时,测试才有效。

如何在我的测试中使用mockMVC?如何禁用 CORSFilter 进行测试,或者如何正确在 mockMvc 中发出请求,这样它就不会抛出有关“ header 值不能为空”的错误。

我尝试在mockMvc中设置随机 header 值,但这并没有改变错误。

最佳答案

java.lang.IllegalArgumentException: header 值不能为 null。因此请使用 .header(key,value) 传递 header 值,如下所示:

 @Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/").header("Origin","*")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello World")));
}

关于Spring 使用带有 CORS 过滤器的 MockMvc 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46405193/

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