簡體   English   中英

Spring AOP參數化注釋

[英]Spring AOP Parameterized Annotation

我是春季AOP的新手,正在努力實現以下目標。

我想定義一個注釋@RequirePermission,它接受一個參數String或enum,並基於該字符串/枚舉我將在建議中進行一些計算。 因此,應該首先驗證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 ;
}

現在,如果在下面的控制器方法中使用注釋,則代碼可以正常工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM