Springboot自定义注解、带参数、改变Controller返回数据

1、创建一个自定义注解类

这个类主要用在控制用户接口级操作权限上。所以需要定义permissionName(权限名称)达到可以带参数进入的效果。

package com.kingteam.permission.annotation;

import java.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.core.Ordered;  

/**
 * 定义权限注解
 * @author 秦晓宇
 * @date: 2020年10月18日 上午12:22:41 
 * @record:
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//最高优先级  
@Order(Ordered.HIGHEST_PRECEDENCE)  
public @interface PermissionAnnotation {

	/** 
	* @Description: 权限名称 
	* @Title: permissionName 
	* @return String
	* @author qin
	* @date 2020年10月18日上午12:16:43
	*/ 
	String permissionName() default "";
	
}

2、创建自定义注解切片操作类,并返回自定义的参数替代原controller参数

做一个简单的判断:如果输入的参数和abc相同,则返回原结果;如果输入的参数和abc不同,则返回没有权限的提醒。

package com.kingteam.permission.annotation;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import com.kingteam.util.common.returnBean.ReturnBean;

/**
 * 权限AOP注解切片处理
 * @author 秦晓宇
 * @date: 2020年10月18日 上午12:00:57 
 * @record:
 */
@Aspect
@Component
public class PermissionAnnotationAspect {

	@Pointcut("@annotation(com.kingteam.permission.annotation.PermissionAnnotation)")
    public void point(){
//        System.out.println("12");
    }
    @Before("point()")
    public void begin() throws Exception{
//        System.out.println("begin");
    }
    @AfterReturning("point()")
    public void after(){
//        System.out.println("commit");
    }

    @Around(value = "@annotation(d)", argNames = "d")
    public ReturnBean around(ProceedingJoinPoint joinPoint,PermissionAnnotation d) throws Throwable{
        System.out.println("---"+d.permissionName());
        System.out.println("around begin");
        if(!d.permissionName().equals("abc"))
        	return ReturnBean.simpleError("您没有这个权限");
        else
        {
            ReturnBean returnBean = (ReturnBean) joinPoint.proceed();
            System.out.println("around commit");
            return returnBean;
        }
    }
}

3、测试自定义注解

3.1、测试输入参数和abc不同的情况

package com.kingteam.permission.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.kingteam.permission.annotation.PermissionAnnotation;
import com.kingteam.util.common.returnBean.ReturnBean;

@Controller  
@RequestMapping("/permission/")  
public class PermissionController {

	@PermissionAnnotation(permissionName = "abcd")
	@RequestMapping(value="test")  
    public @ResponseBody ReturnBean test(
    ){
		System.out.println("ReturnBean test");
		return ReturnBean.simpleSuccess("123");
	}
}

运行结果:输入和参数和abc不同,请求被拦截。同时controller中的操作也不会进行。注意要改变返回数据的话return返回数据位置,要在joinPoint.proceed();之前。

{
    "result": false,
    "describe": "您没有这个权限",
    "data": null
}

3.2、测试输入参数和abc相同的情况

package com.kingteam.permission.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.kingteam.permission.annotation.PermissionAnnotation;
import com.kingteam.util.common.returnBean.ReturnBean;

@Controller  
@RequestMapping("/permission/")  
public class PermissionController {

	@PermissionAnnotation(permissionName = "abc")
	@RequestMapping(value="test")  
    public @ResponseBody ReturnBean test(
    ){
		System.out.println("ReturnBean test");
		return ReturnBean.simpleSuccess("123");
	}
}

运行结果:controller中的方法被执行,返回执行的数据。

{
    "result": true,
    "describe": "123",
    "data": null
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值