当前位置: 首页 > 知识库问答 >
问题:

如何用基本身份验证集成测试Spring Boot?

史宸
2023-03-14

我有一个简单的spring boot(1.3.5)应用程序,它有一个简单的集成测试,在我引入Spring-boot-starter-security之前可以工作。我在application.properties中设置了security.user.name和security.user.password,这似乎是保护我的endpoint密码所需要的全部(如果可能的话,我不希望添加不必要的角色或安全配置使事情复杂化)。但现在集成测试失败了。我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest(randomPort = true)
public class MyTestsIT {

    private TestRestTemplate template = new TestRestTemplate();
    private URL base;

    @Value("${security.user.name}")
    private String username;

    @Value("${security.user.password}")
    private String password;

    @Value("${local.server.port}")
    private int port;

    @Before
    public void beforeTest() throws MalformedURLException {
        base = new URL("http://" + username + ":" + password + "@localhost:" + port);
    }

    @Test
    public void testHello() throws IllegalStateException, IOException {
        System.err.println(base.toString() + "/hello");
        ResponseEntity<String> response = template.getForEntity(base.toString() + "/hello", String.class);
        assertEquals("Incorrect HTTP status returned", HttpStatus.OK, response.getStatusCode());
        String body = response.getBody();
        assertEquals("Incorrect response string.", "Hello World!", body);
    }
}

println语句显示正确的url,与我运行应用程序时在curl中使用的url相同:

curl http://user:password@localhost:8181/hello

返回状态的assert以401失败,我做错了什么?

共有1个答案

澹台浩广
2023-03-14

德欧!当我发布我的问题时,我在使用spring RestTemplate的REST API的Basic authentication找到了答案。不知道为什么我事先的搜索没有找到它。很抱歉吵闹,希望这能帮到别人。

@Before
public void beforeTest() throws MalformedURLException {
    template = new TestRestTemplate(username, password);
    base = new URL("http://localhost:" + port);
}
 类似资料:
  • 看起来它与我们在正常项目中的websecurity配置有冲突。这是文件: 我尝试添加来修复上述问题,但最终仍然以结束

  • 我最近将一个Spring Boot应用程序从V1.5更新到V2.0.3。它是一个具有作为RESTendpoint公开的方法的应用程序,并通过基本的HTTP身份验证加以保护。用户名和密码硬编码在应用程序加载的属性文件中。 自更新以来,响应时间增加了近200ms,处理请求的98%时间花费在BasicAuthenticationFilter.doFilter()中。 更具体地说,需要花费时间对请求中的密

  • 问题内容: 从HttpClient 4.3开始,我一直在使用HttpClientBuilder。我正在连接到具有基本身份验证的REST服务。我将凭据设置如下: 但是,这不起作用(我正在使用的REST服务返回401)。怎么了? 问题答案: 从此处的 抢先身份验证 文档中: http://hc.apache.org/httpcomponents-client- ga/tutorial/html/aut

  • 我们有一个在Apache和nginx上运行的Angular 8应用程序。我们使用带有和的Basic Auth保护此应用程序。 不幸的是,由于对服务器的请求被基本身份验证阻止,应用程序无法加载,Angular无法加载这些文件: 此 路 不通http://root/polyfills-es2015.js因为这是一个跨来源请求,所以不要求提供凭据 已阻止http://root/runtime-es201

  • 我的问题是,我们有一组运行SiteMinder但非常糟糕的遗留代码。它允许IIS匿名并避免使用Active Directory。 我们正在重建此应用程序,并希望将SiteMinder与IIS和集成。净额4.0。我知道我可以构建自己的安全框架,无需用户名和密码即可完成所有工作(因为我们不希望SiteMinder提供),但我想知道是否有办法使用内置的Windows身份验证(窗体或Windows)与Si

  • 我有一个Junit测试用例,其中我使用 根据https://spring.io/blog/2014/05/23/preview-spring-security-test-web-security提供的文档,它实际上并不使用用户名和密码进行身份验证,而是根据我们通过的权限配置SecurityContext。 在我的例子中,每当用户登录到应用程序时,我都会记录一个事件。并且我想编写一个测试用例来检查当