0

私は春のAOPが初めてで、次のことを達成するのに苦労しています。

パラメータ文字列または列挙型を受け入れるアノテーション @RequirePermission を定義したいと思います。その文字列/列挙型に基づいて、アドバイスでいくつかの計算を行います。したがって、 @RequiredPermissions を持つ Controller で定義されたメソッドは、最初に検証する必要があります。これまでの私のコードは次のとおりです。

側面:

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){
    }

何が欠けているのか、どうすればこれを達成できるのか、誰もが私を導くことができます。

4

1 に答える 1

1

@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()); 
}
}
于 2013-02-03T20:34:23.870 に答える