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>
  • 相关阅读:
    PHP Smarty模板的安装
    百度地图API使用方法详解
    总结的一些微信API接口
    WePayUI 快快尝鲜体验
    Python发送邮件
    Python网络编程
    python 内置函数
    Python操作数据库
    Python操作excel
    python之函数
  • 原文地址:https://www.cnblogs.com/llq1214/p/11593568.html
Copyright © 2011-2022 走看看