Spring Security 测试预览:HtmlUnit

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

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

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

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

设置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);
  }
}

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

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

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

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

结论

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

如果您对本博客系列或Spring Security Test支持有任何反馈,我鼓励您通过JIRA、评论区或在Twitter上联系我@rob_winch。当然,最好的反馈是贡献

获取Spring通讯

通过Spring通讯保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部