8
votes

Comment ajouter une authentification de base à TestRestTemplate d'automobile en Springboottest; Botte de printemps 1.4

Mon test d'intégration OAuth avant la démarrage du ressort 1.4 Était comme suit (mises à jour pour ne pas utiliser de fonctionnalités obsolètes):

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {
    ApplicationConfiguration.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class OAuth2IntegrationTest {

    private static final String CLIENT_NAME = "client";
    private static final String CLIENT_PASSWORD = "123456";

    @Autowired
    private TestRestTemplate testRestTemplate;

    @Test
    public void testOAuthAccessTokenIsReturned() {
        MultiValueMap<String, String> request = new LinkedMultiValueMap<String, String>();
        request.set("username", "user");
        request.set("password", password);
        request.set("grant_type", "password");
        @SuppressWarnings("unchecked")

        Map<String, Object> token1 = this.testRestTemplate. //how to add basic auth here
        assertNotNull("Wrong response: " + token, token.get("access_token"));
    }
}


1 commentaires

TestRestTemplate avecbasicauth (String Nom d'utilisateur, mot de passe de chaîne) Ceci semble disponible uniquement dans Spring Boot 1.4.1, est-ce la solution


5 Réponses :


19
votes

Ceci a été corrigé dans le démarrage de printemps 1.4.1 qui a une méthode supplémentaire

TestRestTemplate.WithBasicaTuth (nom d'utilisateur, mot de passe) xxx


1 commentaires

Y a-t-il un moyen de le faire dans un endroit plus central? De cette façon, je devrais répéter le mot de passe dans chaque témoignage qui nécessite une authentification de base. La TestRestTemplate peut-elle être utilisée pour toujours utiliser une authentification de base en quelque sorte? Comment puis-je injecter la TestRestTemplate comme @Bean?



1
votes

Il y a une meilleure solution pour que vous n'ayez pas besoin de retaper de la partie withbasicauth chaque fois xxx


2 commentaires

Cela ne fonctionne pas car la méthode de configuration doit être statique


Vous pouvez essayer avec @BEforeAssement, pas besoin d'être statique



1
votes

Bien que La réponse acceptée est correcte, dans mon cas, je devais reproduire le TestRestTemplate.withbasicauth (. ..) dans chaque méthode de test et classe.

Alors, j'ai essayé de définir dans src / test / java / m.microservice.backage une configuration comme ceci: xxx

que semble d'avoir l'effet de la définition de la modification par défaut TestRestTemplate , permettant l'injection d'un identifiant de références TestRestTemplate n'importe où dans mes cours de test.

Je ne suis pas tout à fait sûr que ce soit vraiment une solution valide, mais vous pouvez le donner à ...


0 commentaires

0
votes

Je pense qu'il existe une meilleure solution si vous utilisez toujours une authentification de base dans votre application, avec les propriétés "Nom de l'utilisateur.name" et "User.Password" définies sur votre application.Properties Fichier:

public class YourEndpointClassTest {
    private static final Logger logger = LoggerFactory.getLogger(YourEndpointClassTest.class);  

    private static final String BASE_URL = "/your/base/url";

    @TestConfiguration
    static class TestRestTemplateAuthenticationConfiguration {

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

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

        @Bean
        public RestTemplateBuilder restTemplateBuilder() {
            return new RestTemplateBuilder().basicAuthentication(userName, password);
        }
    }


    @Autowired
    private TestRestTemplate restTemplate;

//here add your tests...


0 commentaires

0
votes

Dans un cas de test unique, vous pouvez faire comme ceci:

@Before
public void before() {
    // because .withBasicAuth() creates a new TestRestTemplate with the same 
    // configuration as the autowired one.
     testRestTemplate = testRestTemplate.withBasicAuth("username", "password");
}


0 commentaires