spring-security - Spring OAuth 和引导集成测试

标签 spring-security spring-boot spring-test spring-security-oauth2

在 OAuth 资源服务器配置的 Web 应用程序中再次运行 Spring Boot 集成测试的最佳方法是什么。

我可以想到两种理论方法:

  • 在不实际调用授权服务器的情况下模拟资源服务器中的安全上下文。
  • 作为测试的一部分嵌入授权服务器并将身份验证重定向到它。

  • 我想知道其他人是如何解决这个问题的。

    最佳答案

    这个答案与 Ondrej 提供的答案非常相似,但要简单得多。

    Spring Security 4 提供测试支持。要使用它,请确保您有 spring-security-test-4.0.2.RELEASE.jar (或类路径上的更新版本)。您还需要确保使用 spring-test-4.1.0.RELEASE(或更新版本)。

    接下来,您可以使用 MockMvc 作为其他答案所指示的。但是,如果您setup MockMvc具有以下内容:

    import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    @WebAppConfiguration
    public class OAuthTests {
    
        @Autowired
        private WebApplicationContext context;
    
        private MockMvc mvc;
    
        @Before
        public void setup() {
            mvc = MockMvcBuilders
                    .webAppContextSetup(context)
    
                    // ADD THIS!!
                    .apply(springSecurity())
                    .build();
        }
    

    这使它如此
  • 您不再需要担心是否以无状态模式运行
  • 这也意味着您不需要使用其他答案中所示的 apply(springSecurity()) 。

  • 简而言之,您应该能够执行以下操作:

    @Test
    @WithSecurityContext('user')
    public void performOAuth() throws Exception {
        ...    
        // No need for apply(security())!!
        restParcelMockMvc.perform(get("/api/some-resource"))
            .andExpect(...);
    }
    

    我鼓励您通读 Spring Security Testing section 的其余部分引用,因为它提供了许多其他详细信息,包括如何使用自定义身份验证。

    关于spring-security - Spring OAuth 和引导集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31641562/

    相关文章:

    spring-boot - 无法使用自定义 Filter 在 Spring Security 中实现 session 限制

    java - 尽管在 Spring security 中使用自定义用户详细信息类,但主体仍然是字符串

    spring-security - 如何生成用于 Hipster 的加密密码

    spring - 基于 JSON 或 Pipe(|) 的 DSL,用于 Spring Integration 中的动态流生成

    java - com.fasterxml.jackson.databind.exc.InvalidDefinitionException : Cannot construct instance of `org.springframework.web.multipart.MultipartFile`

    maven - spring 集成测试无法加载上下文 "Another resource already exists with name dataSource"

    Grails 预验证场景

    java - 出现白页错误,无法在 REST API 中找到我的问题?

    java - 带有配置文件的 Spring 集成测试

    java - 如何将 AbstractContextLoaderInitializer 包含到我的 mvc 测试执行中?