spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集

2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新)

1. 先写一个登陆记录注解(//记录:XXX时间,XXX姓名,XX系统,登录成功)

@Target(ElementType.METHOD) //作用用方法上
@Retention(RetentionPolicy.RUNTIME)//在运行时可用
public @interface LoginRecords {
    String value();
}

2. 写一个切面对注解进行处理(业务逻辑处理,记录登陆的信息)

@Aspect
@Component
public class logLoginInfo {

    //针对LoginRecords注解
    @Pointcut("@annotation(com.example.jobtest.aspect.annotion.LoginRecords) && execution(* *(..))")
    public void loginRecordsPointcut() {
    }


    @Around("loginRecordsPointcut()")
    public void logLoginInfo(ProceedingJoinPoint joinPoint){
        try {
            //登陆人信息
            LoginInfo info = (LoginInfo) joinPoint.getArgs()[0];
            //先获取登陆结果信息,走完登录流程
            ResultVo resultVo = (ResultVo) joinPoint.proceed();
            String nowTime = nowTime("yyyy-MM-dd HH:mm:ss");
            //记录:XXX时间,XXX姓名,XX系统,登录成功
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            Method method = signature.getMethod();
            LoginRecords annotation = method.getAnnotation(LoginRecords.class);
            String systemType = annotation.value();
            //业务处理,插入记录表中
            //{........}
            System.out.println(nowTime + ":" + info.getName()+"在" + systemType +"系统" + resultVo.getData().toString());
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
    }

    public String nowTime(String regex){
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(regex);
        String nowTime = now.format(formatter);
        return nowTime;
    }

}

3.写一个登录的控制类,这里有asystemlogin跟bsystemlogin 用来区分注解的参数

@RestController
public class Login {
    @PostMapping("/asystemlogin")
    @LoginRecords("asystemlogin")
    public ResultVo checkAsystemlogin(@RequestBody LoginInfo loginInfo){
        ResultVo resultVo;
        if (loginInfo.getName().equals("axiaoyi") && loginInfo.getPwd().equals("aini")){
            resultVo = ResultVo.builder()
                    .code("200")
                    .data("登陆成功")
                    .build();
        }else {
            resultVo = ResultVo.builder()
                    .code("500")
                    .data("登陆失败")
                    .build();
        }
        return resultVo;
    }

    @PostMapping("/bsystemlogin")
    @LoginRecords("bsystemlogin")
    public ResultVo checkBsystemlogin(@RequestBody LoginInfo loginInfo){
        ResultVo resultVo;
        if (loginInfo.getName().equals("bxiaoyi") && loginInfo.getPwd().equals("aini")){
            resultVo = ResultVo.builder()
                    .code("200")
                    .data("登陆成功")
                    .build();
        }else {
            resultVo = ResultVo.builder()
                    .code("500")
                    .data("登陆失败")
                    .build();
        }
        return resultVo;
    }
}

4. 查看返回结果

spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集_第1张图片

spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集_第2张图片

spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集_第3张图片

spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集_第4张图片

你可能感兴趣的:(java知识,Spring,SpringBoot,SpringCloud,java,开发语言,spring,后端,idea)