2016-06-23 12 views
0

Ich habe einen Abfangjäger, dass die LDAP-Gruppenmitgliedschaft eines Benutzer überprüft und wenn es falsch angesehen ist wie so zu einer NoAuthorisation Seite umleitet:Rufen Sie einen Controller aus einem Verfahren preHandle des Interceptor

public class MyIntercept implements HandlerInterceptor { 

public boolean preHandle (HttpServletRequest request, HttpServletReaponse response, Object handler) { 
If (// check access) { 
    response.redirect(/NoAuthorisation?reason=Blablabla); 
    return false; 
} 
return true 
} 

} 

Das funktioniert aber ich Ich möchte den Grund in einer nicht so offensichtlichen Art und Weise senden (nicht in der URL)

Ich dachte ich nenne den NoAuthorization Controller direkt, aber ich weiß nicht wie ich das machen soll.

Alle Ratschläge und Best Practices?

Antwort

2

SpringMVC hat ein Konzept von Flash. Es ist eine Möglichkeit, einfach beliebige Attribute zu einem umgeleiteten Anfrage mit 2 Merkmale übergeben:

  • Sie nicht über die URL verwenden
  • Sie sind nicht auf Saiten beschränkt

Es ist sehr einfach zu bedienen In @RequestMapping kommentierte Controller, da Sie einfach einen RedirectAttributes-Parameter an die Controller-Methode übergeben, ihn ausfüllen und eine redirect:...-Zeichenfolge zurückgeben.

Es kann in einem Interceptor verwendet werden, aber Sie müssen explizit die Ausgabe Flash Map mit statischen Methoden von RequestContextUtils erfordern.

public boolean preHandle (HttpServletRequest request, HttpServletReaponse response, Object handler) { 
If (// check access) { 
    Map<String, Object> flash = RequestContextUtils.getOutputFlashMap(request); 
    // populate the flash map with attributes you want to pass to redirected controller 
    response.redirect(/NoAuthorisation?reason=Blablabla); 
    return false; 
} 
return true 
} 

} 

Auszug aus Spring reference manual:

Flash-Eigenschaften bieten eine Möglichkeit für eine Anforderung Attribut für Verwendung in einem anderen beabsichtigten zu speichern. Dies wird am häufigsten beim Umleiten benötigt - beispielsweise beim Post/Redirect/Get-Muster. Flash-Attribute werden vorübergehend gespeichert, bevor die Umleitung (normalerweise in der Sitzung) nach der Umleitung für die Anforderung verfügbar gemacht und sofort entfernt wird.

...

Flash-Attribut Unterstützung ist immer „on“ und muss nicht explizit aktiviert obwohl, wenn nicht verwendet, verursacht es nie HTTP-Sitzung Schöpfung. Bei jeder Anfrage gibt es eine "Eingabe" FlashMap mit Attributen, die von einer vorherigen Anfrage (falls vorhanden) übergeben wurden und eine "Ausgabe" FlashMap mit Attributen, die für eine nachfolgende Anfrage gespeichert werden sollen. Auf beide FlashMap-Instanzen kann von überall in Spring MVC über statische Methoden in RequestContextUtils zugegriffen werden.

... nach der Weiterleitung werden Attribute aus der "Eingabe" FlashMap automatisch zum Modell des Controllers hinzugefügt, der die Ziel-URL bereitstellt.

1

Sie können die Sitzung von der Anfrage abrufen und einen Grund für die Sitzung als Sitzungsparameter eingeben und sie von der Sitzung an Ihrem Weiterleitungsendpunkt zurückholen.

Vergessen Sie nicht, Ihre Sitzung so schnell wie möglich zu reinigen.

+0

Wie? Wenn ich der Anforderung ein Attribut hinzufüge und in meinem Controller response.redirect() ausführt, verfügt die Anforderung nicht über dieses Attribut – Kam

+0

request.getSession().setAttribute ("Grund", "der Grund"); und an deiner @RequestMapping-Methode, wo du die Redirect-Anfrage "HttpServletRequest request" an die Signatur erhältst, um die Anfrage zu erhalten, und dann kannst du das Session-Attribut nochmal lesen – Ivonet

+0

Ah ich sehe, lass mich das thx versuchen – Kam

Verwandte Themen