2016-10-26 8 views
2

私はスプリングブートでタイムリーフを使用していますが、セキュリティ@withmockuserのテストに問題があります。スプリングブートセキュリティのテスト、タイムリーフエラー

これは、コントローラに

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

    } 

} 

をテストするためのコードであり、これはそれが私に

org.springframework.web.utilを次のエラーを与えるコントローラ

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"; 
    } 

} 

です。 NestedServletException:リクエストの処理に失敗しました。ネストされた例外はorg.thymeleaf.exceptions.TemplateProcessingExceptionです:例外処理テンプレート()

これは、Thymeleafがテンプレートとして "/"を読み込むことを意味しますか? @withMockUserがなければ、私はそれを期待しています。

ありがとうございました。

EDIT:要求されたセキュリティ設定など :

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

のユーザー名は、通常は電子メールアドレスですが、私は今のためにそれらを変更しました。

+0

あなたはSecurityConfigurationコードを共有できますか? –

+0

私はそれを編集に配置しました。 –

答えて

0

パラメータなし@WithMockUserは、ユーザー名「user」、パスワード「password」、役割「ROLE_USER」でtestを実行します。

@WithMockUser(username="test1",roles={"USER"})を使用して、たとえばtest1ユーザーのテストを実行します。

+0

あなたが言ったことはしましたが、まだエラーコードが表示されています:2016-10-27 01:18:38.922 ERROR 8348 --- [main] org.thymeleaf.TemplateEngine:[THYMELEAF] [main]例外処理テンプレート "":Template nameはnullでも空でもかまいません。 org.springframework.web.util.NestedServletException:要求の処理に失敗しました。ネストされた例外はorg.thymeleaf.exceptions.TemplateProcessingExceptionです:例外処理のテンプレート() –

関連する問題