gpt4 book ai didi

java - Spring AOP参数化注解

转载 作者:行者123 更新时间:2023-12-01 14:52:55 24 4
gpt4 key购买 nike

我是 Spring AOP 的新手,正在努力实现以下目标。

我想定义一个注释@RequirePermission,它接受参数字符串或枚举,并根据该字符串/枚举我将在建议中进行一些计算。因此,在 Controller 中定义的任何具有 @RequiredPermissions 的方法都应该首先进行验证。这是到目前为止我的代码。

方面:

package com.myapp.aspect;
import org.aspectj.lang.JoinPoint;
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.myapp.security.RequirePermissionType;
import com.myapp.security.RequirePermission;
@Aspect
public class RequirePermissionAspect {

@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void controllerBean() {}

@Pointcut("execution(@com.myapp.security.RequirePermission * com.myapp.controller.*.*(..))")
public void methodPointcut() {}

@Before("controllerBean() && methodPointcut() ")
public void afterMethodInControllerClass(com.myapp.security.RequirePermissionType name) {
System.out.println("before advice..");
System.out.println("before advice.."+name.name());
}

注释:

package com.myapp.security;

public enum RequirePermissionType {
VIEW, MANAGE, IMPORT, SUPER;
}

@Documented
@Target(ElementType.METHOD )
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface RequirePermission {
/**
*
* @return
*/
RequirePermissionType name() default RequirePermissionType.VIEW ;
}

现在,如果在 Controller 方法中使用注释,代码将有效:

    @RequestMapping(value={"create"})
@RequirePermission
public String createRegion(Model model){
}

但是以下方法不起作用:

    @RequestMapping(value={"create"})
@RequirePermission(name=RequirePermissionType.VIEW)
public String createRegion(Model model){
}

任何人都可以指导我缺少什么以及如何实现这一目标。

最佳答案

@vamslip 这里是更新的方面类。其余一切保持不变。更新方面:

package com.myapp.aspect;
import org.aspectj.lang.JoinPoint;
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.myapp.security.RequirePermissionType;
import com.myapp.security.RequirePermission;
@Aspect
public class RequirePermissionAspect {

@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void controllerBean() {}

@Pointcut("execution(@com.myapp.security.RequirePermission * com.myapp.controller.*.*(..)) && @annotation(name)")
public void methodPointcut(com.myapp.security.RequirePermission name) {}

@Before("controllerBean() && methodPointcut(name) ")
public void afterMethodInControllerClass(com.myapp.security.RequirePermissionType name) {
System.out.println("before advice..");
System.out.println("before advice.."+name.name());
}
}

关于java - Spring AOP参数化注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com