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

用https保护的测试Spring座控制器

齐建白
2023-03-14

有人能给我提供一个代码示例来编写用HTTPS保护的控制器的联调吗??使用HTTP我可以编写,但使用HTTPS我得到了认证错误。

控制器

@RestController
@RequestMapping("/rest/otm/v1")
public class LoginController {  

    @Autowired
    UserAuthenticationService userAuthService;

    @ExceptionHandler({ AuthenticationFailedException.class})
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public void login(HttpServletRequest request,HttpServletResponse response) throws AuthenticationDeniedException {

        //some code
    }

}

测试类别

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest("server.port:0") 
public class IdentityControllerTest {

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

    @Test
    public void test_Login_Controller() {

        SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory();

        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("some-proxy", 8080));
        clientHttpRequestFactory.setProxy(proxy);

        RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);

        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.set("credential", "pratap");
        requestHeaders.set("deviceid", "xyz123");

        HttpHeaders response = restTemplate.postForObject("https://localhost:"+port+"/rest/otm/v1/login", requestHeaders, HttpHeaders.class);               

    }

}

错误

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:51184/rest/otm/v1/login":sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:607)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
    at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:357)
    at com.bosch.inl.otm.controller.IdentityControllerTest.test_Login_Controller(IdentityControllerTest.java:45)

提前感谢

共有1个答案

艾焱
2023-03-14

如果使用自签名证书,通常会报告此错误。默认情况下,Java不信任它,因此您必须禁用证书验证或将证书添加到信任存储。这两种解决方案都在此处描述。

 类似资料:
  • 在发送请求之前(当单元测试时),我是否可以得到csrf令牌?

  • 我在测试使用Play的CSRF保护的控制器时遇到了一些问题。为了演示这一点,我创建了一个非常简单的Play应用程序,它可以将问题最小化。 https://github.com/adamnfish/csrftest 完整的详细信息在该存储库的自述中,但在此进行总结: 考虑设计用于处理表单提交的控制器。它有一个使用CSRFAddToken的GET方法和一个使用CSRFCheck的POST方法。前者向请

  • 尝试用junit5和mockito测试我的web层(spring boot、spring mvc)。http方法的所有其他测试(get、put等)工作正常,但更新。遵循代码。 控制器: 服务: 最后,测试: 结果: CustomerService中的update(...)方法返回为null。无法理解方式。请建议。

  • 我试图使用mockmvcbuilders.standalonesetup方法为一个spring mvc rest控制器创建一个非常基本的单元测试。我一直收到一个404错误。下面列出了测试应用程序上下文、测试类、控制器和整个堆栈跟踪。欢迎任何指导。 java.lang.AssertionError:状态应为:<200>但实际为:<404>在org.springframework.test.util.

  • 英文原文:http://emberjs.com/guides/testing/testing-controllers/ 单元测试方案和计算属性与之前单元测试基础中说明的相同,因为Ember.Controller集成自Ember.Object。 针对控制器的单元测试使用ember-qunit框架的moduleFor来做使这一切变得非常简单。 测试控制器操作 下面给出一个PostsController