如何从@Controller或scriptlet中阻止开发人员调用存储库方法

时间:2014-04-30 06:46:39

标签: spring spring-mvc spring-security

我正在使用spring构建Controller - >服务 - >存储库架构。

但是,其他开发人员可以在控制器或任何地方自动安装存储库。

我不希望别人违反3层架构。

所以,我使用aspectj来检查调用者的存储库。

如果来电者是服务 - >通;

否则抛出异常。

@Aspect
public class ModelAdvice {
    private Pattern pattern = Pattern.compile("^demo\\.services\\..*");

    @Before("execution(* demo.repositories..*Repository.*(..))")
    public void protectRepositories(JoinPoint joinPoint) {
        StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
        for (StackTraceElement element : stElements) {
            Matcher matcher = pattern.matcher(element.getClassName());
            if (matcher.matches()) {
                return;
            }
        }
        throw new RuntimeException("security violation!");
    }
}

它起作用,但很丑,可能很慢。

春天有一些优雅的方式吗?

0 个答案:

没有答案