English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Summary: Many times we may modify the bugs of other colleagues, even the bugs of colleagues who have left, sometimes when we click on the page, we cannot see which controller on the back-end corresponds to it. In fact, we can intercept user requests through sprngmvc's interceptor to know which class and method the page request is directed to. Of course, these printed log information may not be suitable for production environment, or this interceptor may not be necessary...
1. Usage of HandlerInterceptor
First step: register the interceptor
<!-- Register the interceptor --> <mvc:interceptors> <bean class="com.project.base.interceptor.ControlInterceptor" /> </mvc:interceptors>
Second step: inherit HandlerInterceptor and implement the interceptor
package com.iflashbuy.limanman; import java.util.Iterator; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class ControlInterceptor implements HandlerInterceptor{ private Logger logger = LoggerFactory.getLogger(getClass()); /** /* 执行完控制器后调用,即离开时 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3) lancia Exception { } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) lancia Exception { // TODO metodo generato automaticamente } @Override public Boolean preHandle(HttpServletRequest request, HttpServletResponse arg1, Object arg2) throws Exception { int i = 1; try { @SuppressWarnings("unchecked") Map<String, Object> parmMap = request.getParameterMap(); Iterator<String> iter = parmMap.keySet().iterator(); while (iter.hasNext()) { Object key = iter.next(); Object value = parmMap.get(key); logger.info("Il " + i + "o param---->{}-{}", key, value); i = i + 1; } } catch (Exception e) { i = 1; } i = 1; return true; } }
2. Effetto di stampa dietro le quinte
3. Utilizzo esteso dell'intercettore per implementare l'autenticazione HTTP di base
/** /* 执行完控制器后调用,即离开时 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3) lancia Exception { logger.info("className--->" + arg2); logger.info("request--->" + request); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3) lancia Exception { } @Override public Boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { String sessionAuth = (String) request.getSession().getAttribute("auth"); if (sessionAuth != null) { System.out.println("this is next step"); nextStep(request, response); } else { if (!checkHeaderAuth(request, response)) { response.setStatus(401); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0); response.setHeader("WWW-authenticate", "Basic Realm=\"Please enter the administrator account and password\""); return false; } } return true; } private Boolean checkHeaderAuth(HttpServletRequest request, HttpServletResponse response) throws IOException { String auth = request.getHeader("Authorization"); System.out.println("auth encoded in base64 is " + getFromBASE64(auth)); if ((auth != null) && (auth.length() > 6)) { auth = auth.substring(6, auth.length()); String decodedAuth = getFromBASE64(auth); System.out.println("auth decoded from base64 is " + decodedAuth); request.getSession().setAttribute("auth", decodedAuth); return true; } else { return false; } } private String getFromBASE64(String s) { if (s == null) return null; try { byte[] encodeBase64 = Base64.encodeBase64(s.getBytes("UTF-8")); return new String(encodeBase64); } catch (UnsupportedEncodingException e) { return null; } } public void nextStep(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("puoi andare al controller"); }
Conclusione
Questo è tutto il contenuto dell'articolo su come utilizzare l'intercettore HandlerInterceptor di Spring MVC, spero sia utile a tutti. Gli amici interessati possono continuare a consultare il nostro sito:
Analisi del codice dell'interfaccia HandlerInterceptor di Spring
Condivisione del codice dell'intercettore di login implementato da Spring MVC
Se c'è qualcosa di insufficiente, ti preghiamo di lasciare un messaggio per indicarlo. Grazie per il supporto dei amici a questo sito!
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi proprietari, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.