it-swarm.com.de

Spring Security - Whitelist IP-Bereich

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

6
rj2700

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. 

2
rj2700