Viele Ressourcen und Stackoverflow-Fragen, die ich mir angesehen habe, geben Antworten auf die Verwendung von .xml
-Dateien:
Ich möchte nur wissen, ob es möglich ist, einen IP-Adressbereich mithilfe von Spring Security auf eine Positivliste zu setzen, ohne XML-Konfigurationen zu verwenden.
Nachfolgend finden Sie eine einfache Methode in meinem Controller:
@RequestMapping(value = "/makeit", method = RequestMethod.GET)
@ResponseBody
//@PreAuthorize("hasIpAddress('192.168.0.0/16')")
public String requestData() {
return "youve made it";
}
Ich habe eine eigene Klasse für die Sicherheitskonfiguration erstellt, aber sie hat nicht viel, ich habe sie nur für die Annotation EnableGlobalMethodSecurity
erstellt - damit ich die Annotation @PreAuthorize
verwenden kann (aus einer Antwort hier: @PreAuthorize-Annotation, die nicht funktioniert Sicherheit ).
@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')");*/
}
}
Als ich es jedoch versuchte, antwortete es mit (über POSTMAN):
{
"timestamp": 1486743507520,
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource",
"path": "/makeit"
}
Zusätzliche Fakten:
Meine IP-Adresse liegt in diesem Bereich. Und ich verwende Spring Release 1.3.1 (Spring Security ist 4.0.3, glaube ich).
Mit Hilfe von @Dur konnten wir das Problem beheben. Das Problem ist nicht mit Spring Boot (alles funktioniert oben gut), aber wenn ein Benutzer lokal zur Spring-App (localhost: 8080) wechselt, verwendet localhost eine IPv6-Adresse, und der obige Code ermöglicht den Zugriff auf eine IPv4-Adresse.
Sie müssen entweder Ihre SpringSecurityConfig-Datei ändern, indem Sie die IPv4-Adresse in eine IPv6-Adresse ändern (oder den Standardwert von Tomcat) OR. Sie können den Zugriff auf die App ändern (indem Sie zu 127.0.0.1:8080 wechseln).
Hinweis - Dies ist nur für lokale Tests. Sie müssen die IP-Adressen der Benutzer/Dienste testen und erhalten, die auf Ihre App zugreifen.
Kurz gesagt, Sie können einen IP-Bereich auf die Whitelist setzen, indem Sie den obigen Code ohne AuthenticationManagerBuilder verwenden.