zoukankan      html  css  js  c++  java
  • springmvc--拦截器

    拦截器是高级的过滤器。

    拦截器是 中央调度器 在适配器获取到处理器对象之后,执行处理器方法之前,先执行拦截器的方法。 

    (执行链的内容是 拦截器的 preHandle ,处理器方法,拦截器的postHandle,拦截器的afterCompletion,只有拦截器为真,后面的才会继续执行)

    拦截器可以做用户登陆验证,用户权限验证,记录日志等

    package ins.platform.interceptor;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.log4j.Logger;
    import org.springframework.util.StringUtils;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import ins.platform.common.utils.XmlUtils;
    import ins.platform.common.vo.Constant;
    import ins.platform.common.vo.TRiskClassParam;
    import ins.platform.common.web.listener.RedisCache;
    import ins.platform.common.xmlvo.newinfoimport.response.CommonInportResponseXmlVo;
    import ins.platform.common.xmlvo.newinfoimport.response.ResponseBody;
    import net.sf.json.JSONObject;
    
    public class CommonImportInterceptor implements HandlerInterceptor{
    
        private Logger logger = Logger.getLogger(this.getClass());
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            logger.info("进入拦截器CommonImportInterceptor!");
            String user = getUser(request);
            Boolean isValid = getRiskClassParam(user);
            if(!isValid){
                buildResponse(response,"user无效,请联系管理员!");
            }
            return isValid;
        }
        
        public String getUser(HttpServletRequest request) throws IOException {
            BufferedReader br = request.getReader();
            String line;
            StringBuffer xmlVoSb = new StringBuffer();
            try {
                while ((line = br.readLine()) != null) {
                    xmlVoSb.append(line);
                }
                String xmlStr = xmlVoSb.toString();
                if(!StringUtils.isEmpty(xmlStr)){
                    xmlStr = xmlStr.substring(xmlStr.indexOf("<User>")+ 6, xmlStr.indexOf("</User>"));
                    if(!StringUtils.isEmpty(xmlStr)){
                        xmlStr = xmlStr.trim();
                    }
                    logger.info("拦截器CommonImportInterceptor获取到报文中的user为:"+xmlStr);
                    return xmlStr;
                }
                return "";
            } catch (IOException e) {
                logger.error("拦截器CommonImportInterceptorxml IO 异常!");
                throw e;
            } /*finally {
                br.close();
            }*/
        }
        
    
        private void buildResponse(HttpServletResponse response,String errorMessage) {
            CommonInportResponseXmlVo reponseVo = new CommonInportResponseXmlVo();
            ResponseBody responseBody = new ResponseBody();
            responseBody.setErrorMessage(errorMessage);
            reponseVo.setResponseBody(responseBody);
            try {
                response.setHeader("Content-Type", "application/xml;charset=GBK");
                response.setCharacterEncoding("GBK");
                String xml = XmlUtils.obj2Xml(CommonInportResponseXmlVo.class, reponseVo);
                response.getWriter().print(xml);
                response.getWriter().flush();
            } catch (Exception e) {
                logger.error("拦截器CommonImportInterceptorxml回传失败!");
            }
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            
        }
        
        private Boolean getRiskClassParam(String user) {
            String riskClassStr = String.valueOf(RedisCache.getRedisValue(Constant.CLASS_PARAM, user, false));
            if (riskClassStr == null || "".equals(riskClassStr)) {
                logger.error("获取riskClassStr 异常");
                return false;
            }
            JSONObject json = JSONObject.fromObject(riskClassStr);
            TRiskClassParam riskClassParam = null;
            try {
                riskClassParam = (TRiskClassParam) json.toBean(json, TRiskClassParam.class);
            } catch (Exception e) {
                logger.error("获取riskClassParam异常",e);
                return false;
            }
            if(riskClassParam == null) {
                logger.error("获取riskClassParam异常");
                return false;
            }
            if(!"1".equals(riskClassParam.getState())){
                logger.error("当前user无效,请联系管理员!");
                return false;
            }
            Date endDate = riskClassParam.getEnddate();
            if(endDate!=null){
                if(endDate.getTime()<= new Date().getTime()){
                    logger.error("当前user所对应的险种不再提供服务的有效期内,请联系管理员!");
                    return false;
                }
            }
            return true;
        }
    
    }
    
    
     <mvc:interceptors>
            <mvc:interceptor> 
                <mvc:mapping path="/Common/importinfo"/>
                <bean class="ins.platform.interceptor.CommonImportInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
  • 相关阅读:
    HDU 1874 畅通工程续(dijkstra)
    HDU 2112 HDU Today (map函数,dijkstra最短路径)
    HDU 2680 Choose the best route(dijkstra)
    HDU 2066 一个人的旅行(最短路径,dijkstra)
    关于测评机,编译器,我有些话想说
    测评机的优化问题 时间控制
    CF Round410 D. Mike and distribution
    数字三角形2 (取模)
    CF Round410 C. Mike and gcd problem
    CF Round 423 D. High Load 星图(最优最简构建)
  • 原文地址:https://www.cnblogs.com/llq1214/p/11593568.html
Copyright © 2011-2022 走看看