2017-09-25 7 views
0

J'ai essaie de lancer un test MVC baseSpring avec l'MockMvc Test avec CORS filtre

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

Cependant, cela donne toujours java.lang.IllegalArgumentException: Header value must not be null j'ai découvert que si je désactive filtre CORS le test travail sans erreurs.

Mon 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); 
    } 

} 

Une partie de ma sécurité Config

@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); 
    } 
} 

Seulement si je retire le @component dans le SimpleCORSFilter et supprimer la ligne .addFilterBefore(new SimpleCORS...) dans SecurityConfig les travaux d'essai.

Comment utiliser mockMVC dans mon test? Ou comment désactiver le CORSFilter pour le test ou comment faire la demande dans mockMvc correctement afin qu'il ne jette pas une erreur à propos de "valeur d'en-tête ne doit pas être nulle".

J'ai essayé de définir une valeur d'en-tête aléatoire dans le mockMvc mais cela n'a pas changé l'erreur.

Répondre

1

java.lang.IllegalArgumentException: valeur d'en-tête ne doit pas être null.so passer la valeur d'en-tête en utilisant .header (clé, valeur) comme ci-dessous:

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

J'ai essayé d'ajouter une valeur d'en-tête aléatoire en premier. Ce qui a entraîné la même erreur. Ajouter "Origine" comme vous l'avez mentionné a fonctionné. Merci! – isADon