Java Spring Boot&OAuth2:获取ResourceAccessException:POST请求时发生I/O错误“http://localhost:5555/oauth/token“:连接被拒绝:连接

Java Spring Boot&OAuth2:获取ResourceAccessException:POST请求时发生I/O错误“http://localhost:5555/oauth/token“:连接被拒绝:连接,java,rest,spring-mvc,spring-boot,oauth,Java,Rest,Spring Mvc,Spring Boot,Oauth,基于这个示例,我修改了源代码,添加了存储库和其他rest控制器。资源和授权服务器正在同一应用程序中运行/配置 我添加了一个端点/api/login帖子,其中包含请求正文: {"usernamme":"foo", "password":"bar"} 我想在控制器调用的服务中获取此用户的访问令牌。此实现如下所示: 控制器 Rest客户端配置 测试 测试基地 运行应用程序时,我可以调用端点,例如使用POSTMAN。在测试过程中,我得到了问题标题中描述的拒绝连接。我试图找出测试不起作用的原因。有谁能给

基于这个示例,我修改了源代码,添加了存储库和其他rest控制器。资源和授权服务器正在同一应用程序中运行/配置

我添加了一个端点/api/login帖子,其中包含请求正文:

{"usernamme":"foo", "password":"bar"}
我想在控制器调用的服务中获取此用户的访问令牌。此实现如下所示:

控制器

Rest客户端配置

测试

测试基地


运行应用程序时,我可以调用端点,例如使用POSTMAN。在测试过程中,我得到了问题标题中描述的拒绝连接。我试图找出测试不起作用的原因。有谁能给我一个提示来解决这个问题吗?

太奇怪了。自从我将TestBase类更改为:

@RunWith(SpringJUnit4ClassRunner.class)
// @WebAppConfiguration
@ContextConfiguration(classes = Application.class)
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
@Autowired
@Qualifier("OAuth2RestOperations")
private OAuth2RestOperations client;

@Override
public OAuth2AccessToken authenticate(final String username, final String password) {
    final ResourceOwnerPasswordResourceDetails resourceDetails = (ResourceOwnerPasswordResourceDetails) client.getResource();
    resourceDetails.setUsername(username);
    resourceDetails.setPassword(password);
    return client.getAccessToken();
}
@Configuration
@Import({ OauthProperties2.class })
@EnableOAuth2Client
public class RestClientConfig {

    @Autowired
    private OauthProperties2 oauth;

    @Bean(name = "OAuth2RestOperations")
    public OAuth2RestOperations restTemplate(final OAuth2ClientContext oauth2ClientContext) {
       return new OAuth2RestTemplate(resource(), oauth2ClientContext);
    }

    @Bean
    public OAuth2ProtectedResourceDetails resource() {
       final ResourceOwnerPasswordResourceDetails resource = new ResourceOwnerPasswordResourceDetails();
       resource.setAccessTokenUri(oauth.getClient().getAccessTokenUri());
       resource.setClientId(oauth.getClient().getClientId());
       resource.setClientSecret(oauth.getClient().getClientSecret());
       resource.setGrantType(oauth.getClient().getGrantType());
       resource.setScope(oauth.getClient().getScope());
       return resource;
    }

}
public class SecurityApiControllerTest extends TestBase {

    @InjectMocks
    private SecurityApiController controller;

    @Test
    public void loginOK() throws Exception {
       final String credentials = FileUtils.readContent("requests/loginOK.json");
    // @formatter:off
        mvc.perform(post("/api/login")
            .contentType(MediaType.APPLICATION_JSON_VALUE)
            .content(credentials))
            .andExpect(status().isOk());
    // @formatter:on
    }

}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = Application.class)
public class TestBase {

    @Autowired
    protected WebApplicationContext context;

    @Autowired
    protected FilterChainProxy springSecurityFilterChain;

    protected MockMvc mvc;

    @Before
    public void setUp() {
    MockitoAnnotations.initMocks(this);
        mvc = MockMvcBuilders.webAppContextSetup(context).addFilter(springSecurityFilterChain).build();
    }
 }
@RunWith(SpringJUnit4ClassRunner.class)
// @WebAppConfiguration
@ContextConfiguration(classes = Application.class)
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)