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).
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.