一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

springmvc攔截404錯(cuò)誤

 頭號(hào)碼甲 2020-01-16

繼承DispatcherServlet覆蓋noHandlerFound方法

#### web.xml

 <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>com.peppa.crm.web.manage.common.CrmDispatchServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/mvc-dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

#### 代碼

import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.peppa.crm.web.manage.controller.CommonController;
import com.peppa.crm.web.manage.viewmodel.Response;
import com.peppa.domain.dto.EmployeeDto;
import com.peppa.domain.enums.SystemNoticeTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @program: 404錯(cuò)誤攔截并記錄
 * @description:
 * @author: zhoupengfei
 * @create: 2019-05-28 16:17
 **/
public class CrmDispatchServlet extends DispatcherServlet {
    protected static final Logger logger = LoggerFactory.getLogger(CrmDispatchServlet.class);
    /**圖片忽略**/
    public static final String[] ignoreUrl={"favicon.ico","unauthorized"};

    public static final String crmVersion="crmVersion";
    public static final String logout="logout";

    @Override
    public void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //忽略的url
        for(String ignore:ignoreUrl){
            if(request.getRequestURL().toString().contains(ignore)){
                super.noHandlerFound(request,response);
                return;
            }
        }
        //獲取客戶端版本
        int clientVersion=0;
        String v=getRequestVersion(request);
        if(StringUtils.isNotEmpty(v)){
            clientVersion=Integer.parseInt(v);
        }
        Subject subject = SecurityUtils.getSubject();
        Session session=subject.getSession();
        EmployeeDto employeeDto= (EmployeeDto) session.getAttribute("CurrentUser");
        if(clientVersion<CommonController.crmVersion){
            //版本判斷
            if(employeeDto!=null){
                HashMap<String,Object> param=new HashMap<>(8);
                param.put("bizType", SystemNoticeTypeEnum.WS_GO_URL.getValue());
                List<Integer> userIdList=new ArrayList();
                userIdList.add(employeeDto.getId());
                param.put("ids", userIdList);
                if(CommonController.crmVersion-clientVersion>1){
                    //中間有多個(gè)版本暫時(shí)直接退出
                    param.put("msg",logout);
                }else{
                    param.put("msg",CommonController.versionAction);
                }
                HttpRequest.post("http://"+CommonController.wsServerUrl+"/pushMsgController/pushMsg")
                        .body(JSON.toJSONString(param))
                        .execute();
            }
        }
        StringBuffer log=new StringBuffer("資源不存在url="+request.getRequestURL());
        if(employeeDto!=null){
            log.append(",用戶Id="+employeeDto.getId());
        }
        logger.error(log.toString());
        Response r=new Response();
        r.failure("您訪問(wèn)的資源不存在,url="+request.getRequestURL()+",請(qǐng)退出重新登錄.").code(HttpStatus.NOT_FOUND.value());
        response.setContentType("application/json;charset=utf-8");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("application/json");
        response.getWriter().print(JSON.toJSONString(r));
    }

    /**
     * 獲取請(qǐng)求的版本
     */
    private String getRequestVersion(HttpServletRequest httpRequest) {
        //從header中獲取token
        String version = httpRequest.getHeader(crmVersion);

        //如果header中不存在token,則從參數(shù)中獲取token
        if (StringUtils.isEmpty(version)) {
            version = httpRequest.getParameter(crmVersion);
        }
        if (StringUtils.isEmpty(version)) {
            //獲取cookie數(shù)組
            Cookie[] cookies = httpRequest.getCookies();
            if (cookies == null) {
                return null;
            }
            //遍歷cookie數(shù)組
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(crmVersion)) {
                    version = cookie.getValue();
                    break;
                }
            }
        }
        return version;
    }

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    热情的邻居在线中文字幕| 色婷婷人妻av毛片一区二区三区| 国产精品大秀视频日韩精品| 欧美精品日韩精品一区| 国产性色精品福利在线观看| 99久久精品视频一区二区| 噜噜中文字幕一区二区| 日韩国产亚洲欧美激情| 热情的邻居在线中文字幕| 乱女午夜精品一区二区三区| 国产伦精品一区二区三区高清版| 午夜精品久久久99热连载| 黑丝袜美女老师的小逼逼| 亚洲一区二区久久观看| 不卡免费成人日韩精品| 日木乱偷人妻中文字幕在线| 午夜视频免费观看成人| 东京热电东京热一区二区三区| 日韩欧美三级中文字幕| 欧美日韩国产免费看黄片| 内射精品欧美一区二区三区久久久| 色好吊视频这里只有精| 国产超薄黑色肉色丝袜| 99久只有精品免费视频播放| 国产日产欧美精品视频| 黄片在线免费看日韩欧美| 黄色国产自拍在线观看| 91欧美日韩精品在线| 日韩精品视频一二三区| 国产免费一区二区三区不卡| 超碰在线播放国产精品| 亚洲一区二区三区中文久久 | 好吊日在线观看免费视频| 亚洲欧美中文字幕精品| 千仞雪下面好爽好紧好湿全文| 久久国产精品热爱视频| 欧美一区二区口爆吞精| 亚洲精品国产美女久久久99| 国产一区欧美一区二区| 欧美日韩一级黄片免费观看| 国产又猛又黄又粗又爽无遮挡|