SpringBoot:具有授权的WebMvcTest

时间:2017-05-13 12:56:08

标签: spring spring-mvc spring-boot spring-security thymeleaf

我有一个基本的SpringBoot应用程序。使用Spring Initializer,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行的JAR文件。

我有这个测试:

@RunWith(SpringRunner.class)
@WebAppConfiguration
@WebMvcTest
public class MockMvcTests {

    // Pull in the application context created by @ContextConfiguration
    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @MockBean
    private I18NService i18NService;

    @MockBean
    private EmailService emailService;

    @MockBean
    private PasswordResetTokenService passwordResetTokenService;

    @MockBean
    private UserService userService;

    @MockBean
    private CompanyService companyService;

    @MockBean
    private UserSecurityService userSecurityService;

    @Before
    public void setup() {
        // Setup MockMVC to use our Spring Configuration
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    /**
     * 
     * @throws Exception
     *             If anything fails.
     */
    @Test
    public void getDeviceEventsTest() throws Exception {
        this.mockMvc
                .perform(get("/deviceevent/list") //
                .accept(MediaType.parseMediaType("text/html;charset=UTF-8")))
                .andExpect(status().isOk()) //
                .andExpect(model().size(1)); //
    }

但是运行测试我得到了这个例外

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#authorization.expression('hasRole(''ROLE_ADMIN'')')" (tdk/common/menu:62)

有没有办法绕过授权?

1 个答案:

答案 0 :(得分:0)

我看到奇怪的表达中的第一个可能的问题  hasRole(''ROLE_ADMIN''),在这里看起来像两个单引号而不是双引号,但也许它在日志中看起来很奇怪。

无论如何,要绕过用于测试的auth机制,您需要在测试模式下禁用Spring Security,有一些工作方式描述here

我通常使用this方式配置和配置文件设置,因为它比其他描述的方式更灵活。