Promjena parametara opružnog modela s presretačem Handler

1. Uvod

U ovom uputstvu usredotočit ćemo se na proljetni MVC HandlerInterceptor. Točnije, promijenit ćemo parametre modela Spring MVC prije i nakon obrade zahtjeva.

Ako želite čitati o tome HandlerInterceptor's osnove, pogledajte ovaj članak.

2. Ovisnosti Mavena

Da bi se koristila Presretači, morate uključiti sljedeći odjeljak u a ovisnosti odjeljak vašeg pom.xml datoteka:

 org.springframework spring-web 5.2.8.OBUSTAVLJANJE 

Najnoviju verziju možete pronaći ovdje.

Ova ovisnost pokriva samo Spring Web, pa ne zaboravite dodati spring-core i proljeće-kontekst za cjelovitu web aplikaciju i knjižnicu dnevnika po vašem izboru.

3. Prilagođena implementacija

Jedan od slučajeva upotrebe HandlerInterceptor dodaje uobičajene / korisničke parametre modelu, koji će biti dostupni u svakom generiranom prikazu.

U našem primjeru koristit ćemo prilagođenu implementaciju presretača za dodavanje prijavljenog korisničkog imena u parametre modela. U složenije sustave možemo dodati konkretnije informacije poput: put korisnika avatar, mjesto korisnika itd.

Počnimo s definiranjem našeg novog Presretač razred:

javna klasa UserInterceptor proširuje HandlerInterceptorAdapter {private static Logger log = LoggerFactory.getLogger (UserInterceptor.class); ...}

Produljujemo HandlerInterceptorAdapter, kao što samo želimo implementirati preHandle () i postHandle () metode.

Kao što smo već spomenuli, želimo dodati prijavljeno korisničko ime modelu. Prije svega, moramo provjeriti je li korisnik prijavljen. Te podatke možemo dobiti provjerom SecurityContextHolder:

public static boolean isUserLogged () {try {return! SecurityContextHolder.getContext (). getAuthentication () .getName (). equals ("anonymousUser"); } catch (Iznimka e) {return false; }}

Kad an HttpSession je uspostavljeno, ali nitko nije prijavljen, korisničko ime u kontekstu Spring Security jednako je anonimniKorisnik. Dalje, nastavljamo s implementacijom preHandle ():

3.1. Metoda preHandle ()

Prije obrade zahtjeva ne možemo pristupiti parametrima modela. Da bismo dodali korisničko ime, moramo ga koristiti HttpSession za postavljanje parametara:

@Override public boolean preHandle (HttpServletRequest zahtjev, HttpServletResponse odgovor, objektni objekt) baca iznimku {if (isUserLogged ()) {addToModelUserDetails (request.getSession ()); } return true; }

To je presudno ako neke od ovih podataka koristimo prije obrade zahtjeva. Kao što vidimo, provjeravamo je li korisnik prijavljen, a zatim dodamo parametre našem zahtjevu dobivanjem njegove sesije:

privatna praznina addToModelUserDetails (sesija HttpSession) {log.info ("=============== addToModelUserDetails ======================= ==== "); Niz loggedUsername = SecurityContextHolder.getContext (). GetAuthentication (). GetName (); session.setAttribute ("korisničko ime", loggedUsername); log.info ("user (" + loggedUsername + ") session:" + session); log.info ("=============== addToModelUserDetails ==========================="); }

Koristili smo SecurityContextHolder dobiti loggedUsername. Možete poništiti Spring Security Pojedinosti o korisniku implementacija za dobivanje e-pošte umjesto standardnog korisničkog imena.

3.2. Metoda strostHandle ()

Nakon obrade zahtjeva, dostupni su naši parametri modela, pa im možemo pristupiti kako bismo promijenili vrijednosti ili dodali nove. Da bismo to učinili, koristimo nadjačano postHandle () metoda:

@Override public void postHandle (HttpServletRequest req, HttpServletResponse res, Object o, ModelAndView model) baca izuzetak {if (model! = Null &&! IsRedirectView (model)) {if (isUserLogged ()) {addToModel; }}}

Pogledajmo detalje implementacije.

Prije svega, bolje je provjeriti da li model nije null. Spriječit će nas od susreta s NullPointerException.

Štoviše, možemo provjeriti je li a Pogled nije primjer preusmjeravanjaPogled.

Nema potrebe za dodavanjem / promjenom parametara nakon što se zahtjev obradi, a zatim preusmjeri, jer će novi kontroler ponovno izvršiti rukovanje. Da bismo provjerili je li pogled preusmjeren, uvodimo sljedeću metodu:

javna statička logička vrijednost jeRedirectView (ModelAndView mv) {String viewName = mv.getViewName (); if (viewName.startsWith ("redirect: /")) {return true; } Prikaz pogleda = mv.getView (); return (prikaz! = null && prikaz instance SmartView && ((SmartView) prikaz) .isRedirectView ()); }

Na kraju, ponovno provjeravamo je li korisnik prijavljen, a ako da, dodajemo parametre u model Spring:

privatna praznina addToModelUserDetails (ModelAndView model) {log.info ("=============== addToModelUserDetails ======================= ==== "); Niz loggedUsername = SecurityContextHolder.getContext () .getAuthentication (). GetName (); model.addObject ("loggedUsername", loggedUsername); log.trace ("session:" + model.getModel ()); log.info ("=============== addToModelUserDetails ==========================="); }

Imajte na umu da je bilježenje vrlo važno, jer ova logika djeluje "iza kulisa" naše aplikacije. Lako je zaboraviti da na svakom mijenjamo neke parametre modela Pogled a da ga pravilno ne prijavite.

4. Konfiguracija

Da dodamo naše novostvorene Presretač u Spring konfiguraciju, moramo nadjačati addInterceptors () metoda iznutra WebConfig razred koji provodi WebMvcConfigurer:

@Override public void addInterceptors (Registar registra InterceptorRegistry) {registry.addInterceptor (novi UserInterceptor ()); }

Istu konfiguraciju možemo postići uređivanjem naše konfiguracijske datoteke XML Spring:

Od ovog trenutka možemo pristupiti svim parametrima koji se odnose na korisnike na svim generiranim prikazima.

Napominjemo, ako je više proljeća Presretači su konfigurirani, preHandle () metoda se izvršava redoslijedom konfiguracije dok postHandle () i afterCompletion () metode se pozivaju obrnutim redoslijedom.

5. Zaključak

Ovaj tutorial predstavlja presretanje web zahtjeva pomoću Spring MVC-ovog HandlerInterceptor-a kako bi se pružile korisničke informacije.

U ovom konkretnom primjeru usredotočili smo se na dodavanje evidentiranih korisničkih podataka u našu web aplikaciju parametrima modela. Možete ovo produžiti HandlerInterceptor provedba dodavanjem detaljnijih informacija.

Svi primjeri i konfiguracije dostupni su ovdje na GitHubu.

5.1. Članci u seriji

Svi članci serije:

  • Uvod u proljetne presretače MVC Handler
  • Promjena parametara modela opruge pomoću presretača Handler (ovaj)

$config[zx-auto] not found$config[zx-overlay] not found