AOP面向切面编程,实现获取接口入参

在最近的一段时间遇到过很多面向切面的编程(AOP)。

也查找过许多资料,都没有符合目前的需求,也是今天突然的灵光一现想到的解决方案

个人需求:

        现在项目已经接近尾声,但是用户的权限没有做,主要的任务是做一套针对于每个用户的权限,实现每个用户只能查看自己权限下的数据。

ps:由于前期做的不太完善,要给用户新增加省市区的权限

首次思路:

        是通过登录后把权限写入到token中,在调取接口时解析效验token是取出存入到全局静态方法中。已实现。

本次思路:

       通过AOP面向切面实现注解解析授权:已实现

注解层:

package com.nengyy.dem_rest_server.aspect;



import java.lang.annotation.*;

@Target(ElementType.METHOD) // METHOD 是获取接口入参的一个类型
@Retention(RetentionPolicy.RUNTIME) // 接口调用的时间
@Documented
public @interface CheckRole { // 检查权限的注解

}

注解获取入参具体实现:

package com.nengyy.dem_rest_server.aspect;

import com.nengyy.dem_auth.security.Auth; // 个人的写的全局静态调用方法
import com.nengyy.dem_auth.security.UserInfo; // 用户的信息 
import com.nengyy.dem_dto.common.InBasePageDto; // 分页的公共类
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;


@Slf4j
@Aspect
@Component
public class CheckRoleAspect {



    @Pointcut("@annotation(com.nengyy.dem_rest_server.aspect.CheckRole)") // 注解路径
    public void beForeCheckRole() {
    }

    @Before("beForeCheckRole()")
    public void checkRole(JoinPoint point) {
        Object[] args = point.getArgs();  // 获取入参
        UserInfo userInfo = Auth.getUserInfo();  // 全局静态方法 获取用户信息
        InBasePageDto arg = (InBasePageDto) args[0]; // 此处是把每个接口的入参继承的分页类强转
// 下面是要对入参进行的处理  贴合个人的实际情况处理
//        CityUtils.checkRole(arg.getAreaIdList(),userInfo.getCountyId());
//        CityUtils.checkRole(arg.getCityIdList(),userInfo.getCityId());
//        CityUtils.checkRole(arg.getSpaceIdList(),userInfo.getSpaceId());
    }

}

分页类:

@Data
public class InBasePageDto {
    // 市
    private List<String> cityIdList;  
    // 区
    private List<String> areaIdList;
    // 区县下的站点
    private List<String> spaceIdList;

    //这样写入是对每个分页的接口进行单独的处理  入参市,区,站点,字段必须一致
    
    protected Integer pageSize = 10;

    protected Integer pageNo = 1;
    protected Integer cnt;

    public Integer getDatabasePageNo(){
        if(this.pageNo <= 0){
            return 0;
        }
        return this.pageNo-1;
    }
}

controller层:


    @CheckRole
    @PostMapping("/getCheckPointList")
    PagedResources<OutCheckPointDto> getCheckPointList(@RequestBody InCheckPointDto inCheckPointDto) throws Exception {
        if(ListUtils.isNotNull(inCheckPointDto.getAreaIdList()) && ListUtils.isNotNull(inCheckPointDto.getCityIdList()) && ListUtils.isNotNull(inCheckPointDto.getSpaceId())){
            Page<OutCheckPointDto> data = alarmService.getCheckPointList(inCheckPointDto);
            return new PagedResources<>(data);
        }else {
            return new PagedResources<>(new Page<>());
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值