2017-08-16 2 views
0

So haben wir einen Autorisierungsserver, mit dem wir OAuth2 Access Token erstellen. Alle Untersysteme verifizieren das Zugriffstoken und können den Anforderungspfad nach Berechtigungen überprüfen. In einem der Untersysteme müssen wir jedoch in den Anfragetext schauen und die 'ID' extrahieren, um zu überprüfen, ob der Benutzer die richtige Berechtigung zum Senden hat die Anfrage. Die Anforderungsnachricht ist im JSON-Format und dies ist eine POST-Anforderung mit der vom Client bereitgestellten ID.Wie Zugriff auf den Anfragetext in SpringBoot AccessDecisionVoter?

Die ID in der Anfrage ist eine Prozess-ID und einige Benutzer haben möglicherweise keine Berechtigung für einige Prozesse, daher müssen wir die ID überprüfen.

Also während in , können wir nur Anfrage URI bekommen, aber ich kann HttpServletRequest nicht erhalten, um die Nachricht zu lesen. (Hinweis: Wir haben einen Request-Wrapper, der es uns ermöglicht, den Anfragetext mehrmals zu lesen)

Ich habe versucht, HttpServletRequest automatisch zu verkabeln, kein Glück. Es gibt einen Fehler, dass kein Thread an die Anfrage gebunden wurde

Ich dachte auch über die Implementierung UserDetailService, aber wieder kein Glück, da dies nicht von Spring Boot aufgerufen wird. Denken Sie daran, dass wir eine benutzerdefinierte AuthorizationServerTokenServices verwenden, und das ist in einer allgemeinen Bibliothek.

Wie bekomme ich Http-Servlet-Anfrage oder die Anfrage Körper in ?

Antwort

0

Sie sollten in der Lage sein, eine AccessDecisionVoter<FilterInvocation> zu implementieren, wo Sie die Anfrage erhalten können. Funktioniert das nicht:

public class MyAccessDecisionVoter implements AccessDecisionVoter<FilterInvocation> { 
    @Override 
    public boolean supports(ConfigAttribute attribute) { 
     return false; 
    } 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return true; 
    } 

    @Override 
    public int vote(Authentication authentication, FilterInvocation fi, Collection<ConfigAttribute> attributes) { 
     int result = ACCESS_ABSTAIN; 
     fi.getRequest() // this is the request 
     // decide the outcome and set result 

     return result; 
    } 
} 
+0

Danke! Die Frage ist also, ist das der richtige Ort dafür? In Bezug auf gute Praxis? – xbmono

+0

Dafür sind die Wähler der Entscheidung: D – Strelok

Verwandte Themen