SpringBoot切面控制商務邏輯

來源:互聯網
上載者:User

標籤:end   conf   slf4j   false   author   str   logger   signature   調用   

商務邏輯:寫一個公用攔截類,過濾傳進Controller的參數

為了調用介面安全起見,每個需要調用的介面有一個參數accessToken,用於安全驗證

 

註:先進入過濾器Filter,再進入aop,最後進入Controller,我們做的事在aop過濾Controller參數

package com.xgt.config;import com.xgt.common.BaseController;import com.xgt.common.PcsResult;import com.xgt.util.IpUtil;import org.apache.commons.lang.StringUtils;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import java.lang.reflect.Method;/** * 攔截器:記錄使用者介面操作次數 * @author cc */@Aspect@Componentpublic class ControllerInterceptor extends BaseController {    private static final Logger logger = LoggerFactory.getLogger(ControllerInterceptor.class);    @Value("${spring.profiles.active}")    private String env;/**     * 定義攔截規則:攔截com.xgt.controller.bs包下面的所有類中     */    @Pointcut("execution(* com.xgt.controller.bs..*.*(..))")    public void controllerMethodPointcut(){}/**     * 攔截器具體實現     * @param pjp     * @return JsonResult(被攔截方法的執行結果,或需要登入的錯誤提示。)     */    @Around("controllerMethodPointcut()") //指定攔截器規則;也可以直接把“execution(* com.xjj.........)”寫進這裡    public PcsResult Interceptor(ProceedingJoinPoint pjp){        Object[] paramValues = pjp.getArgs();        String accessToken = "";        for(int i=0;i<paramValues.length;i++){            if(accessToken!=null) {                accessToken = paramValues[0].toString();            }        }        Object result = null;        try {            String accessTokenKey="xxxx";            if(!accessToken.equals(accessTokenKey)){                return newResult(false).setMessage("參數錯誤");            }            int requestCount=0;            if(StringUtils.isNotEmpty(accessTokenKey)){                requestCount++;                if(requestCount>100){                    return newResult(false).setMessage("請求的太快啦,休息一會再試試");                }            }            if(result == null){                // 一切正常的情況下,繼續執行被攔截的方法                result = pjp.proceed();                requestCount++;            }        } catch (Throwable e) {            logger.error("exception: ", e);            return newResult(false).setMessage(""+e.getMessage());        }        return (PcsResult) result;    }}

補充:攔截命名規則簡述

 

1)表示匹配所有方法

execution(* *(..))  

2)表示匹配com.savage.server.UserService中所有的公有方法 

execution(public * com. savage.service.UserService.*(..))  

3)表示匹配com.savage.server包及其子包下的所有方法

execution(* com.savage.server..*.*(..))  

 

SpringBoot切面控制商務邏輯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.