Ich muss die Federsicherheit erweitern, um den http-Response-Inhalt zu hashen und das Ergebnis innerhalb einer Kopfzeile zu platzieren. Mein Ansatz besteht darin, einen Servlet-Filter zu erstellen, der die Antwort liest und den entsprechenden Header platziert. Der Filter ist mit Federsicherheit über ein separates Plugin registriert. Die Implementierung ist weitgehend hier .
Das gesamte Setup funktioniert einwandfrei, wenn die endgültige Anwendung "render" im Controller verwendet, um JSON an den Client auszugeben. Wenn jedoch die gleichen Daten über "Antworten" formatiert werden, wird ein 404 an den Client zurückgegeben. Ich bin nicht in der Lage, den Unterschied zu erklären.
Als Referenz ist alles die Version 2.3.11 und die Version 2.0-RC4 des Federkerns.
Registrieren Sie den Filter über doWithSpring meines Plugins
%Vor%Meine Filterimplementierung
%Vor%Die HttpServletResponseCopier-Implementierung. Die einzige Änderung gegenüber der Quelle besteht darin, alle 3 Methodensignaturen von write anstelle von nur einer zu überschreiben.
%Vor%Und schließlich meine Controller-Methode in der eigentlichen Anwendung
%Vor%Irgendein Einblick würde geschätzt werden, da ich nicht verstehe, warum das Rendern funktionieren und nicht reagieren würde. Außerdem bin ich offen für andere Ansätze, um dieses Bedürfnis zu lösen, wenn das, was ich versuche, einfach nicht in Grails funktionieren wird. Vielen Dank im Voraus.
Ich habe das ganze Projekt in Grals gesteckt und ein ähnliches Problem bekommen. Ich musste einige Änderungen vornehmen.
Für die Registrierung habe ich SpringSecurityUtils.clientRegisterFilter
method verwendet, wie ich es von einer Bootstrap.groovy
-Anwendung gemacht habe.
Außerdem habe ich den Filter in resources.groovy
Es hat mit Render funktioniert, aber 404 mit reagieren. Also änderte die Antwort auf:
%Vor%Und es hat funktioniert, nachdem ich den Filter entfernt habe. Ich habe 404, wann immer ich deinen Filter einsetze und versucht action.gsp.
zu finden Ich habe eine Änderung in ServletOutputStreamCopier
vorgenommen, indem ich die Delegierten für die Methoden close
und flush
implementiert habe, und es hat beim Rendern und Antworten gut funktioniert:
Ich habe die Details der Antwortimplementierung nicht durchgespielt, aber ich denke, dass es Verwirrung stiftet, da es keine Möglichkeit zum Schließen oder Schließen gibt und ein Fallback zum Aufrufen der Ansicht statt zum Rendern von json verwendet wird.
Ich weiß, es ist ein bisschen spät, aber jetzt funktioniert es.
resources.groovy
%Vor%Boostrap.groovy
%Vor%Am besten, Eder
Tags und Links grails spring-security