Springboot+aopによるapiインタフェース権限ブロック
2799 ワード
要求に対する権限ブロックには、1、フィルタ、2、ブロック、3の3つの方法が使用できます.AOP
ここではaopを使用し、主にプロジェクトの他の場所でブロッカーを使用していますが、新しいapiインタフェースはブロッカーで放行し、実行順序はフィルタ、ブロッカー、切面の順です.
あまり話さないで、コードをつけてください.
1.まず対応するパッケージを追加します.gradleを使用してバージョン管理を行います.
2.新しいカットクラスを作成し、@Aspect、@Componentの2つのコメントを加えて宣言する
ここでは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つのブロック方法を書く時間があります!