基于spring AOP的 权限校验

package com.example.mongodemo.config;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.mongodemo.dto.ResultDTO;
import com.example.mongodemo.mapper.ManagerMapper;
import com.example.mongodemo.pojo.Manager;
import lombok.SneakyThrows;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * @Author lyr
 * @create 2020/4/2 0:00
 */
@Aspect
@Component
@Slf4j
public class CheckIdentityHandler {
    @Pointcut("@annotation(CheckIdentity)")
    public void delegate(){}

    @Autowired
    private ManagerMapper managerMapper;

    @SneakyThrows
    @Around("delegate()")
    public Object around(ProceedingJoinPoint pjp) {

        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
        HttpServletRequest request = sra.getRequest();
        String managerUnionId = (String) request.getAttribute("unionId");
        if(managerUnionId==null) {
            return fail();
        }
        LambdaQueryWrapper<Manager> wrapper = new LambdaQueryWrapper<>();
        Object result;
        boolean hasRole = managerMapper.selectOne(wrapper.select(Manager::getManagerId).eq(Manager::getUnionId,managerUnionId))!=null;
        if(hasRole) {
            log.info("校验 通过");
            result = pjp.proceed(pjp.getArgs());

        }else {
            result = fail();
        }


        return result;


    }

    /**
     * @return 权限校验失败 --> 用户无管理员 权限访问资源
     */
    private ResultDTO fail() {
        log.info("校验不通过");
        return ResultDTO.getNoAuthority();
    }

}

发布了174 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43923045/article/details/105259643