Spring AOP獲取請(qǐng)求URL的入?yún)⒓胺祷刂?通用方法)

以下代碼為通用的代碼潘懊,其中json解析使用的是fastJson,可以記錄用戶(hù)訪(fǎng)問(wèn)的ip、url蜘渣、入?yún)⒑统鰠?/p>

/**
 * @author jasonLu
 * @date 2017/10/26 9:57
 * @Description:獲取請(qǐng)求的入?yún)⒑统鰠? */
@Component
@Aspect
public class RequestAspect {

    private static final Logger logger = LoggerFactory.getLogger(RequestAspect.class);

    @Pointcut("@within(org.springframework.stereotype.Controller) || @within(org.springframework.web.bind.annotation.RestController)")
    public void pointcut()
    {
        // 空方法
    }


    @Around("pointcut()")
    public Object handle(ProceedingJoinPoint joinPoint) throws Throwable {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //IP地址
        String ipAddr = getRemoteHost(request);
        String url = request.getRequestURL().toString();
        String reqParam = preHandle(joinPoint,request);
        logger.info("請(qǐng)求源IP:【{}】,請(qǐng)求URL:【{}】,請(qǐng)求參數(shù):【{}】",ipAddr,url,reqParam);

        Object result= joinPoint.proceed();
        String respParam = postHandle(result);
        logger.info("請(qǐng)求源IP:【{}】,請(qǐng)求URL:【{}】,返回參數(shù):【{}】",ipAddr,url,respParam);
        return result;
    }

    /**
     * 入?yún)?shù)據(jù)
     * @param joinPoint
     * @param request
     * @return
     */
    private String preHandle(ProceedingJoinPoint joinPoint,HttpServletRequest request) {

        String reqParam = "";
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method targetMethod = methodSignature.getMethod();
        Annotation[] annotations = targetMethod.getAnnotations();
        for (Annotation annotation : annotations) {
            //此處可以改成自定義的注解
            if (annotation.annotationType().equals(RequestMapping.class)) {
                reqParam = JSON.toJSONString(request.getParameterMap());
                break;
            }
        }
        return reqParam;
    }

    /**
     * 返回?cái)?shù)據(jù)
     * @param retVal
     * @return
     */
    private String postHandle(Object retVal) {
        if(null == retVal){
            return "";
        }
        return JSON.toJSONString(retVal);
    }


    /**
     * 獲取目標(biāo)主機(jī)的ip
     * @param request
     * @return
     */
    private String getRemoteHost(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肺然,隨后出現(xiàn)的幾起案子蔫缸,更是在濱河造成了極大的恐慌,老刑警劉巖际起,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拾碌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡街望,警方通過(guò)查閱死者的電腦和手機(jī)校翔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)它匕,“玉大人展融,你說(shuō)我怎么就攤上這事≡ゼ恚” “怎么了告希?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)烧给。 經(jīng)常有香客問(wèn)我燕偶,道長(zhǎng),這世上最難降的妖魔是什么础嫡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任指么,我火速辦了婚禮,結(jié)果婚禮上榴鼎,老公的妹妹穿的比我還像新娘伯诬。我一直安慰自己,他們只是感情好巫财,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布盗似。 她就那樣靜靜地躺著,像睡著了一般平项。 火紅的嫁衣襯著肌膚如雪赫舒。 梳的紋絲不亂的頭發(fā)上悍及,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音接癌,去河邊找鬼心赶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缺猛,可吹牛的內(nèi)容都是我干的缨叫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼枯夜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼弯汰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起湖雹,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曙搬,沒(méi)想到半個(gè)月后摔吏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纵装,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年征讲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橡娄。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诗箍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挽唉,到底是詐尸還是另有隱情滤祖,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布瓶籽,位于F島的核電站匠童,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏塑顺。R本人自食惡果不足惜汤求,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望严拒。 院中可真熱鬧扬绪,春花似錦、人聲如沸裤唠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巧骚。三九已至赊颠,卻和暖如春格二,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竣蹦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工顶猜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痘括。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓长窄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纲菌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挠日,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)翰舌,斷路器嚣潜,智...
    卡卡羅2017閱讀 134,701評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,285評(píng)論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,850評(píng)論 6 342
  • 早加餐:紅豆面包晚水果:西梅 參考目標(biāo): 1份豆2份肉3份“新鮮”水果4份谷物/薯5份蔬菜,深綠色葉菜最好6杯水 ...
    靜趣_兒童心理師閱讀 381評(píng)論 0 0
  • 你可知道茴字有幾種寫(xiě)法椅贱? 大概是悲傷到了極致的才會(huì)厭世 這兩天不知打哪來(lái)的壓力抑的我喘不過(guò)氣 數(shù)學(xué)懂算,訓(xùn)練,小女孩庇麦,...
    文白白閱讀 176評(píng)論 0 0