AOP实现权限拦截

01注解名称:CheckUnSysAdmin

package com.sf.XWFS.aop;

import java.lang.annotation.*;

/**
 * @author cc
 * Desc 校验除超管外的角色,都进行拦截
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CheckUnSysAdmin {

}

02注解实现类:CommonAspect

package com.sf.XWFS.aop;

import com.sf.XWFS.constant.RoleConst;
import com.sf.XWFS.service.OrderService;
import com.sf.erui.common.response.ResponseHelper;
import com.sf.erui.context.UserContext;
import lombok.extern.slf4j.Slf4j;
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.springframework.stereotype.Component;

import javax.annotation.Resource;


@Aspect
@Component
@Slf4j
public class CommonAspect {

    @Resource
    private OrderService orderService;


    @Pointcut("execution(* com.sf.XWFS..*(..)) && @annotation(com.sf.XWFS.aop.CheckUnSysAdmin)")
    public void checkUnSysAdmin() {
    }

    @Around("checkUnSysAdmin()")
    public Object checkUnSysAdmin(ProceedingJoinPoint pjp) throws Throwable {

        try {
            String currentUserName = UserContext.getCurrentUserName();
            //越权校验
            String roleId = orderService.getRoleId(currentUserName);
            if (!RoleConst.SYSADMIN_ROLE_ID.equals(roleId)) {
                return ResponseHelper.buildFail("权限不足,请联系管理员");
            }
        } catch (Throwable throwable) {
            throw new SecurityException("用户无权访问!", throwable);
        }

        return pjp.proceed();
    }

}

03角色常量类

package com.sf.XWFS.constant;

/**
 * @author cc
 * 角色常量
 */
public class RoleConst {

    /**
     * 系统管理员角色ID_106
     */
    public static final String SYSADMIN_ROLE_ID = "102";

    /**
     * 大区管理员角色ID_103
     */
    public static final String LRADMIN_ROLE_ID = "103";

    /**
     * 地区管理员角色ID_104
     */
    public static final String RQADMIN_ROLE_ID = "104";

    /**
     * 普通用户角色ID_105
     */
    public static final String PT_ROLE_ID = "105";

    /**
     * 普通管理员角色ID_106
     */
    public static final String PTGLY_ROLE_ID = "106";


}

04Controller层方法上引入

 	@CheckUnSysAdmin
    @ApiOperation(value = "通过主键查询一条数据(订单脱敏)", notes = "查-单查")
    @RequestMapping("getOrderById")
    @ResponseBody
    public Response getOrderById(@RequestBody OrderDO record) {
        logger.info("收件人脱敏接口");
        String orderid = record.getOrderid();
        Assert.notNull(orderid, "请选择一条数据!");
        OrderDO orderDO = orderService.getOrderByOrderId(orderid);
        return ResponseHelper.buildOk(orderDO);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值