2016-10-26 5 views
2

Ich verwende Thymoleaf mit Spring-Boot und ich bekomme ein Problem beim Testen der Sicherheit @ Withmockuser. Testen Spring-Boot-Sicherheit, Thymeleaf Fehler

Dies ist der Code zum Testen des Controller

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; 
import org.springframework.boot.test.mock.mockito.MockBean; 
import org.springframework.security.test.context.support.WithMockUser; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringRunner; 
import org.springframework.test.web.servlet.MockMvc; 

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; 
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; 

@SuppressWarnings("SpringJavaAutowiringInspection") 
@RunWith(SpringRunner.class) 
@ContextConfiguration(classes = SecurityConfiguration.class) 
@WebMvcTest(IndexController.class) 
public class IndexControllerTest { 

    @Autowired 
    private MockMvc mvc; 

    @MockBean 
    private IndexController IndexController; 

    @Test 
    @WithMockUser 
    public void testAuthenticated() throws Exception { 
     this.mvc.perform(get("/")) 
       .andExpect(status().is(200)); 

    } 

} 

Und dies ist der Controller

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class IndexController { 
    private DemoshopService demoshopService; 

    @Autowired 
    public void setDemoshopService(DemoshopService demoshopService) { 
     this.demoshopService = demoshopService; 
    } 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String list(Model model) { 
     model.addAttribute("demoshops", demoshopService.listAllDemoshops()); 
     return "index"; 
    } 

} 

Es gibt mir die folgenden Fehlern

org.springframework.web.util. NestedServletException: Anforderungsverarbeitung fehlgeschlagen; Verschachtelte Ausnahme ist org.thymeleaf.exceptions.TemplateProcessingException: Ausnahmeverarbeitungsvorlage()

Bedeutet das, dass Thymeleaf "/" als Vorlage liest? Ohne @withMockUser tut es, was ich erwarte.

Vielen Dank für die Hilfe.

EDIT: wie gewünscht die Sicherheitskonfiguration:

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 

@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/css/**").permitAll() 
       .antMatchers("/images/**").permitAll() 
       .antMatchers("/webjars/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .and() 
      .logout()          
       .permitAll(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("test1").password("password").roles("USER") 
       .and() 
       .withUser("test2").password("password").roles("USER") 
       .and() 
       .withUser("test3").password("password").roles("USER") 
       .and() 
       .withUser("test4").password("password").roles("USER") 
       .and() 
       .withUser("test5").password("password").roles("USER") 
       .and() 
       .withUser("test6").password("password").roles("USER"); 
    } 
} 

Die Benutzernamen sind in der Regel E-Mail-Adresse aber ich änderte sie für jetzt.

+0

können Sie den SecurityConfiguration-Code teilen? –

+0

Ich legte es in den Schnitt. –

Antwort

0

Ohne Parameter @WithMockUser wird Test mit dem Benutzernamen "user", dem Passwort "password" und den Rollen "ROLE_USER" ausgeführt.

Verwenden Sie @WithMockUser(username="test1",roles={"USER"}), um Test für Benutzer test1 beispielsweise auszuführen.

+0

Ich habe getan, was Sie sagten, aber ich bekomme immer noch den Fehlercode: 2016-10-27 01: 18: 38.922 Fehler 8348 --- [main] org.thymeleaf.TemplateEngine: [THYMELEAF] [main] Ausnahme Verarbeitung Vorlage "": Vorlage Der Name darf nicht null oder leer sein. org.springframework.web.util.NestedServletException: Anforderungsverarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.thymeleaf.exceptions.TemplateProcessingException: Ausnahmeverarbeitungsvorlage() –