springMVC 拦截器 HandlerInterceptor 用法





springMVC 拦截器 HandlerInterceptor 用法

摘要: 很多时候我们都会去修改其他同事的bug,甚至是已经离职的同事的bug,有时候我们点击页面去不着到后台对应的是哪个controller,针对这个问题,其实我们可以通过sprngmvc的拦截器来拦击用户的请求从而知道页面请求的是哪个class的哪个方法,当然这些打印日志信息肯能并不适合放在生产环境,或者这个拦截器也是非必要的。。。。
一、HandlerInterceptor 用法
第一步:注册拦截器
 
<!-- 注册拦截器 -->
         <mvc:interceptors>
                 <bean class="com.project.base.interceptor.ControlInterceptor" />
         </mvc:interceptors>
 
 
 
第二步:继承HandlerInterceptor ,实现拦截器
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;
 
publicclassControlInterceptorimplementsHandlerInterceptor{
         private Logger logger  = LoggerFactory.getLogger(getClass());
         /**
          * 执行完控制器后调用,即离开时
          */
         @Override
         publicvoidafterCompletion(HttpServletRequestrequest,
                          HttpServletResponseresponse, Object arg2, Exception arg3)
                                            throws Exception {
         }
         @Override
         publicvoidpostHandle(HttpServletRequestarg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
                          throws Exception {
                 // TODOAuto-generated method stub
                
         }
 
         @Override
         publicbooleanpreHandle(HttpServletRequestrequest, 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()) {
                                   Objectkey = iter.next();
                                   Objectvalue = parmMap.get(key);
                                   logger.info("第" + i + "个param---->{}-{}", key, value);
                                   i= i + 1;
                          }
                 } catch (Exception e) {
                          i = 1;
                 }
                 i = 1;
                 returntrue;
 
         }
        
}
 
 




二、后台打印信息效果
 




三、拓展使用拦截器实现http基本认证
/**
          * 执行完控制器后调用,即离开时
          */
         @Override
         publicvoidafterCompletion(HttpServletRequestrequest,
                          HttpServletResponseresponse, Object arg2, Exception arg3)
                          throws Exception {
 
                 logger.info("className--->" + arg2);
                 logger.info("request--->" + request);
         }
 
         @Override
         publicvoidpostHandle(HttpServletRequestrequest,
                          HttpServletResponseresponse, Object arg2, ModelAndView arg3)
                          throws Exception {
 
         }
 
         @Override
         publicbooleanpreHandle(HttpServletRequestrequest,
                          HttpServletResponseresponse, Object arg2) throws Exception {
                 String sessionAuth =(String) request.getSession().getAttribute("auth");
                 if (sessionAuth != null) {
                          System.out.println("this is nextstep");
                          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", "BasicRealm=\"请输入管理员账号密码\"");
                                   returnfalse;
                          }
 
                 }
                 returntrue;
         }
 
         privatebooleancheckHeaderAuth(HttpServletRequestrequest,
                          HttpServletResponseresponse) throws IOException {
 
                 String auth =request.getHeader("Authorization");
                 System.out.println("auth encoded inbase64 is " + getFromBASE64(auth));
 
                 if ((auth != null) && (auth.length()> 6)) {
                          auth =auth.substring(6, auth.length());
 
                          StringdecodedAuth = getFromBASE64(auth);
                          System.out.println("auth decodedfrom base64 is " + decodedAuth);
 
                          request.getSession().setAttribute("auth", decodedAuth);
                          returntrue;
                 } else {
                          returnfalse;
                 }
 
         }
 
         private String getFromBASE64(String s) {
                 if (s == null)
                          returnnull;
                 try {
                          byte[] encodeBase64 =Base64.encodeBase64(s.getBytes("UTF-8"));
                          returnnewString(encodeBase64);
                 } catch (UnsupportedEncodingExceptione) {
                          returnnull;
                 }
 
         }
 
         publicvoidnextStep(HttpServletRequestrequest,
                          HttpServletResponseresponse) throws IOException {
                 System.out.println("you can go tothe controller");
         }
 
 

你可能感兴趣的:(springMVC,拦截器,handle)