我正在使用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!");
}
}
它起作用,但很丑,可能很慢。
春天有一些优雅的方式吗?