Springboot+aopによるapiインタフェース権限ブロック


要求に対する権限ブロックには、1、フィルタ、2、ブロック、3の3つの方法が使用できます.AOP
ここではaopを使用し、主にプロジェクトの他の場所でブロッカーを使用していますが、新しいapiインタフェースはブロッカーで放行し、実行順序はフィルタ、ブロッカー、切面の順です.
あまり話さないで、コードをつけてください.
1.まず対応するパッケージを追加します.gradleを使用してバージョン管理を行います.
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop
compile group: 'org.springframework.boot', name: 'spring-boot-starter-aop', version: '2.1.6.RELEASE'

2.新しいカットクラスを作成し、@Aspect、@Componentの2つのコメントを加えて宣言する
 
  
/**
 * @description     api      
 * @author: czw
 * @create: 2019-08-14 10:40
 **/
@Aspect
@Component
public class AuthAspect {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Resource
    private ApiAuthService apiAuthService;

    /**
     *    *        
     *    *      
     * (..)       
     * @return
     */
    @Around("execution(* net.microlinktech.xxx.xxx.xxx.api.ApiController.*(..))")
    public Object aspectHandlerMethod(ProceedingJoinPoint pjp) throws Throwable {
        HttpServletRequest request = ContextHolderUtils.getRequest();
        String token = request.getHeader("authToken");
        if(StringUtils.isEmpty(token)){
           return JSON.toJSON(ApiResult.error(-1,"        !")).toString();
        }
        String base64DecodeStr = new String(Base64.decodeBase64(token));
        String[] str = base64DecodeStr.split(",");
        ApiAuth apiAuth = apiAuthService.findByApiId(str[0]);
        if(checkDate(str[1]) > 5){ //             
            return JSON.toJSON(ApiResult.error(-2,"     !"));
        }
        //         
        String requestIp = RequestIpUtils.getIp(request);
        if(!requestIp.equals(apiAuth.getIp())){
            return JSON.toJSON(ApiResult.error(-3,"    ,ip:" + requestIp +",      !"));
        }
        //  apiId    
        if(null == apiAuth){
            return JSON.toJSON(ApiResult.error(-4,"     ,       !"));
        }
        String checkToken = getToken(apiAuth.getApiId(),apiAuth.getApiKey(),str[1]);
        //      ,     key+id+time  token    ,       
        if(!token.equals(checkToken)){
            return JSON.toJSON(ApiResult.error(-5,"    ,       !"));
        }
        logger.info("authToken=" + request.getHeader("authToken"));
        return pjp.proceed();
    }
}

3.切断面で指定されたクラスを作成してテストする
/**
 * @description     api  
 * @author: czw
 * @create: 2019-08-14 10:49
 **/
@Controller
@RequestMapping(value = "/api/")
public class ApiController {

    @PostMapping("test")
    @ResponseBody
    public String test(){
        return "  api  !";
    }
}

このように切面権限認証を完了し、他の2つのブロック方法を書く時間があります!