web-dev-qa-db-fra.com

Spring Security - plage d'adresses IP de la liste blanche

Un grand nombre de ressources et de questions de stackoverflow que j'ai consultées apportent des réponses à l'utilisation de fichiers .xml

Tout ce que je voudrais savoir, c'est s'il est possible de mettre en liste blanche une plage d'adresses IP à l'aide de Spring Security sans utiliser la configuration XML. 

Voici une méthode simple dans mon contrôleur: 

@RequestMapping(value = "/makeit", method = RequestMethod.GET)
@ResponseBody
//@PreAuthorize("hasIpAddress('192.168.0.0/16')")
public String requestData() {

    return "youve made it";
}

J'ai créé une classe distincte pour la configuration de sécurité, mais elle n'a pas grand-chose. Je l'ai simplement créée pour l'annotation EnableGlobalMethodSecurity - pour pouvoir utiliser l'annotation @PreAuthorize (à partir d'une réponse ici: @PreAuthorize, l'annotation ne fonctionnant pas Sécurité ). 

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http
            .authorizeRequests()
                .anyRequest().access("hasIpAddress('0.0.0.0/0')");

        /*http
            .authorizeRequests()
                .anyRequest().hasIpAddress("0.0.0.0/0");*/

        /*http
            .authorizeRequests()
                .antMatchers("/**").hasIpAddress("0.0.0.0/0");*/

        /*http
            .authorizeRequests()
                .antMatchers("/**").access("hasIpAddress('0.0.0.0/0')");*/

        /*http
            .authorizeRequests()
                .anyRequest().access("hasIpAddress('0.0.0.0/0')");*/

    }
}

Cependant, lorsque j'ai essayé, il a répondu par (via POSTMAN): 

{
  "timestamp": 1486743507520,
  "status": 401,
  "error": "Unauthorized",
  "message": "Full authentication is required to access this resource",
  "path": "/makeit"
}

Faits supplémentaires: 

Mon adresse IP est dans cette plage. Et j'utilise la version 1.3.1 de Spring (Spring Security est 4.0.3, je crois). 

6
rj2700

Avec l'aide de @Dur, nous avons pu résoudre le problème. Le problème ne concerne pas Spring Boot (tout fonctionne correctement ci-dessus), mais le problème est que lorsqu'un utilisateur accède à l'application Spring localement (localhost: 8080), localhost utilise une adresse IPv6 et que le code ci-dessus autorise l'accès à une adresse IPv4. 

Vous devez soit modifier votre fichier SpringSecurityConfig en modifiant l'adresse IPv4 en IPv6 (ou la valeur par défaut de Tomcat) OR vous pouvez modifier le mode d'accès à l'application (en accédant à 127.0.0.1:8080). 

Remarque - ceci est uniquement pour les tests locaux. Vous devrez tester et obtenir les adresses IP des utilisateurs/services qui accéderont à votre application. 

En bref, vous pouvez ajouter à la liste blanche une plage d'adresses IP en utilisant le code ci-dessus sans AuthenticationManagerBuilder. 

2
rj2700