Spring Security 测试预览:HtmlUnit

工程 | Rob Winch | 2014 年 5 月 23 日 | ...

[callout title=2015 年 3 月 31 日更新]此博客已过时且不再维护。 请参考参考文档的 测试部分 以获取更新的文档。[/callout]

在我的 之前的博客 中,我们探讨了如何使用 Spring MVC Test 进行测试支持。 现在,我们将了解相同的支持如何与 Spring Test MVC HtmlUnit 一起使用。

[callout title=最低版本]Spring Security 测试支持不适用于 spring-test-mvc-htmlunit-1.0.0.M1.jar。 相反,您只需使用最新的快照。 这是由于进行了一些细微修改,以允许 Spring Security 和 MockMvcHtmlUnitDriver 一起工作。[/callout]

设置 HtmlUnit 和 Spring Security

HtmlUnit 和 Spring Security 集成的设置与 使用 Spring MVC Test 和 HtmlUnit 的设置非常相似。 下面我们重点介绍不同之处

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebMvcConfig.class, WebSecurityConfig.class, MockDataConfig.class})
@WebAppConfiguration
@TestExecutionListeners(listeners={ServletTestExecutionListener.class,
        DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class,
        TransactionalTestExecutionListener.class,
        WithSecurityContextTestExcecutionListener.class})
@WithMockUser
public class MockMvcHtmlUnitCreateMessageTest {
  @Autowired
  private Filter springSecurityFilterChain;

  @Autowired
  private WebApplicationContext context;

  private WebClient webClient;


  @Before
  public void setup() {
      MockMvc mockMvc = MockMvcBuilders
              .webAppContextSetup(context)
              .addFilters(springSecurityFilterChain)
              .build();
      driver = new MockMvcHtmlUnitDriver(mockMvc, true);
  }
}

[callout title=源代码]您可以在 github 上 找到此博客的完整源代码[/callout]

  • 第一个不同之处是确保将我们的 Security 配置 WebSecurityConfig 添加到 @ContextConfiguration
  • 下一个不同之处是确保添加 WithSecurityContextTestExcecutionListener,就像我们在 测试基于方法的安全性 时所做的那样。
  • 然后,我们需要使用 Spring Security WithSecurityContext 注解。 在本例中,我们使用了 @WithMockUser,但方法安全部分中使用的任何注解都可以利用。
  • 我们需要获取 springSecurityFilterChain 并将其添加到 MockMvcBuilders 过滤器。

现在我们可以运行我们的测试,假设我们已使用用户名“user”和角色“ROLE_USER”进行身份验证。 当然,就像我们在方法安全性中所做的那样,我们可以轻松更改注释以反映我们要运行的用户。

无需在测试之前显式进行身份验证,我们就可以确保更轻松地隔离我们的测试。 通过简单地以用户身份运行,我们大大简化了测试(当身份验证像 SSO 工作流程一样复杂时尤其如此)。 我们还通过消除实际进行身份验证的需要来大大加快测试速度。 更重要的是,我们可以使用上面概述的相同步骤将 Spring Security Test 支持与 HtmlUnit/WebDriverHtmlUnit/Geb 集成。

结论

我们现在已经介绍了 Spring Security Testing 支持如何使方法安全性、Web 安全性和基于 HtmlUnit 的测试更容易。 我们希望您喜欢这个博客系列。

如果您对此博客系列或 Spring Security Test 支持有任何反馈,我鼓励您通过 JIRA、通过评论部分或在 Twitter 上 ping 我 @rob_winch 与我们联系。 当然,最好的反馈来自 贡献

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

取得领先

VMware 提供培训和认证,以加速您的进步。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部