ich einige Feder @RestControllers Methoden haben Feder, die Ich mag würde mit einem Wert injizieren, die mit jeder Anforderung als eine Anforderung Attribut kommt (die den Benutzer) so etwas wie:Injekt Anfrage Attribut von Anforderungssteuerung Methoden
@RestController
@RequestMapping("/api/jobs")
public class JobsController {
// Option 1 get user from request attribute as prop somehow
private String userId = "user1";
// Option 2 inject into method using aspect or something else
@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Jobs>> getJobs() throws ResourceNotFoundException {
// currentUser is injected
this.getJobs(currentUser);
}
ich weiß, was ich tun kann, dass:
@RestController
@RequestMapping("/api/jobs")
public class JobsController {
@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Jobs>> getJobs(HttpServletRequest request) throws ResourceNotFoundException {
String currentUser = null;
if (request.getAttribute("subject") != null) {
currentUser = request.getAttribute("subject").toString();
}
this.getJobs(currentUser);
}
Aber das würde mich benötigen diesen Code bei jeder Methode in meinem Programm zu schreiben, die mir scheint, eine wirklich schlechte Praxis.
Gibt es eine Möglichkeit zu erreichen, was ich will?
Wenn die Antwort Aspekt erfordert, wird ein Codebeispiel sehr geschätzt werden, da ich nur darüber gelesen habe, aber nie wirklich etwas mit Aspekt getan hat.
aktualisieren
Der Code i dies vereinfacht werden vorgeschlagen kann mit:
@RestController
@RequestMapping("/api/jobs")
public class JobsController {
@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Jobs>> getJobs(@Value("#{request.getAttribute('subject')}" String currentUser) throws ResourceNotFoundException {
this.getJobs(currentUser);
}
Aber erfordern mich immer noch, dass der Parameter bei jeder Methode hinzuzufügen. Kann dieser Parameter irgendwie in jede Methode injiziert werden?
Haben Sie lesen [im Referenzhandbuch] (http://docs.spring.io/ spring/docs/aktuell/spring-framework-reference/html/mvc.html # mvc-ann-requestheader)? Sie benötigen keinen Aspekt, da dieser standardmäßig unterstützt wird. Machen Sie die Dinge nicht komplexer als nötig. –
Ich kann nicht zu verstehen, wie es ist out-of-the-box? Ich muss dieses Stück Code auf jede Methode setzen, die ich habe, ich möchte es vermeiden. – Osher
Wenn es JWT ist, dann empfehle ich dringend, anstatt ein Attribut mit der Anfrage richtig zu integrieren und das Prinzipal zu verwenden. Auf diese Weise können Sie 'getPrincipal' auf die Anfrage anwenden oder einfach den' Principal' zur Methodensignatur hinzufügen.Wenn Sie Spring Security zum Dekodieren der JWT verwenden, erhalten Sie diese Unterstützung kostenlos (Sie benötigen die Konfiguration). –