Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java springaop参数化注释_Java_Spring_Aop_Aspectj - Fatal编程技术网

Java springaop参数化注释

Java springaop参数化注释,java,spring,aop,aspectj,Java,Spring,Aop,Aspectj,我是SpringAOP新手,正在努力实现以下目标 我想定义一个注释@RequireMission,它接受一个参数字符串或枚举,并基于该字符串/枚举,我将在advice中进行一些计算。因此,应该首先验证控制器中定义的具有@RequiredPermissions的任何方法。这是到目前为止我的代码 方面: package com.myapp.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Asp

我是SpringAOP新手,正在努力实现以下目标

我想定义一个注释@RequireMission,它接受一个参数字符串或枚举,并基于该字符串/枚举,我将在advice中进行一些计算。因此,应该首先验证控制器中定义的具有@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 ;
}
现在,如果按以下方式在控制器中使用注释方法,代码将正常工作:

    @RequestMapping(value={"create"})
    @RequirePermission
    public String createRegion(Model model){
    }
但以下措施不起作用:

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

任何人都可以指导我缺少什么,以及如何做到这一点。

@vamslip这里是更新的aspect类。其余的都保持不变。 更新内容:

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()); 
}
}

无论如何,使用这个
@Pointcut(“execution(@com.gdev.vim.security.requiremission*com.gdev.vim.controller.*.*(..)&&@annotation(name)”)让它工作起来了。
:然后请与您分享答案更改后的代码如下<代码>@Pointcut(“execution(@com.myapp.security.requirecommission*com.myapp.controller.*.*.*(..)&@annotation(name)”)public void methodPointcut(com.myapp.security.requirecommission name){}@Before(“controllerBean()&&methodPointcut(name)”)public void after methodInControl Allerclass(com.myapp.security.requirecommission类型名称){System.out.println(“建议前…”);System.out.println(“建议前…”+name.name());}我的意思是说在下面的框中公布你的答案