2012-05-06 5 views
6

Ich benutze feder Sicherheit meiner Web zu sichern, wenn ich es durch feder roo erzeugte Konfigurationsdatei in application-security.xml, in <http> Knoten lerne:Spring-Sicherheit kann nicht übereinstimmen "? Parameter" -Format?

<intercept-url pattern="/userses?form" access="hasRole('ROLE_ADMIN')" /> 

Es bedeutet, wenn Sie erstellen möchten ein Benutzerobjekt, zuerst müssen Sie sich anmelden, um ADMIN Erlaubnis zu erhalten. Aber eigentlich hat es nicht funktioniert. Überprüfen Sie das Protokoll:

2012-05-06 11:39:11,250 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/userses'; against '/userses?form' 

Das Framework verwenden, um die/userses statt/userses mit vergleichen bilden, übersprungen Authentifizierungsprozess als String stimmen nicht überein. Um dies zu überprüfen Ich versuche auch eine andere URL:

<intercept-url pattern="/userses/abc" access="hasRole('ROLE_ADMIN')" /> 

Ich bat die/userses/abc, erkannt Benutzer nicht autorisiert ist, und bewegt/Login-Seite, das Protokoll überprüft:

2012-05-06 11:46:44,343 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/uesrses/abc'; against '/userses/abc' 

So meine Frage ist: Unterstützt nicht 3-Unterstützung "? Parameter" Muster oder ich verpasste etwas zu konfigurieren, um dies zu unterstützen? PS: Der gesamte Code wird von roo ohne Änderung erzeugt, auch wundern Sie sich, warum es nicht funktioniert.

Antwort

6

Standardmäßig verwendet spring security einen Ant-Style-Abgleich, der bei Parametern nicht übereinstimmen kann. Regex Matching jedoch kann Spiel auf Parameter

Versuchen Sie es wie so definieren:

<http request-matcher="regex"> 
    <security:intercept-url pattern="\A/userses\?form.*\Z" access="hasRole('ROLE_ADMIN')" /> 
</http> 

Sie wissen nicht, warum Roo dies nicht automatisch. Scheint so, als müsste es.

+0

Vielen Dank für Ihre Antwort. Eine andere Frage, ich denke, vielleicht kennst du die Antwort. Die @Secure-Methode hat bei mir nicht funktioniert. Ich habe -Tag hinzugefügt und die pom.xml modifiziert, um die Abhängigkeit zu erfüllen. Über der Methode im Controller habe ich @Secured ("ROLE_ADMIN") hinzugefügt. Aber egal welche Rolle jeder hat, irgendetwas falsch? @Secured ("ROLE_ADMIN") @RequestMapping (Wert = "abc", Methode = RequestMethod.GET, erzeugt = "text/html") public Zeichenfolge create() { return Users.getString(); // myCreate (); } – JerryCai

+0

@JerryCai Vielleicht sollten Sie eine neue Frage aufschlagen. Es ist schwierig, Code in den Kommentaren zu lesen, und es wird anderen mit dem gleichen Problem helfen, wenn sie es als eigenständige Frage zu SO finden. –

+0

Ok, ich werde das tun, danke. – JerryCai

6

Dieses Verhalten wird durch die "request-matcher" in Verwendung definiert. Wie in der Dokumentation angegeben, ist der Standardwert "ant", der angibt, dass ein AntPathRequestMatcher verwendet werden soll, und eine Alternative ist "regex", die RegexRequestMatcher. Die javadocs (verlinkt) geben Einzelheiten über die Matcher an, einschließlich der Tatsache, dass die erstere mit dem "servletPath + pathInfo" einer Anfrage übereinstimmt und die letztere mit ihrem "servletPath + pathInfo + queryString".

+0

Was Tim sagte: eine neue Frage beginnen. Versuchen Sie nicht, eine Frage in einen Kommentar zu stopfen. –

+0

Ok, ich werde das tun, danke. – JerryCai