使用 Spring 数据剩余时带有注入值的自定义逻辑
Custom Logic with Injected Values when using Spring Data Rest
我想转换现有的 Web 服务以利用 spring-data-rest。
如何在 spring 数据剩余之上使用注入值(特别是 OAuth2 Principal)实现自定义逻辑以保持现有功能?
例如,假设我想覆盖 /person/1 的 GET 方法,以便在它继续访问 return 人 1 的数据之前联系审计 Web 服务。
现在,在使用 spring-data-rest 之前,我会:
@RequestMapping(value = "/person/{id}", method = RequestMethod.GET)
public void getPerson(@RequestBody ...., Principal principal)
{
/* Let Big Brother know that principal.getName() is doing this */
return thePerson;
}
我如何使用 Spring Data Rest 生成的端点做这样的事情?
感谢您的建议。我发现在这种情况下(对我来说)最有效的是 Dave Syer 建议的,并且只使用 AspectJ。
最后,这将允许您向 Spring Data JPA 存储库的方法添加自定义日志记录逻辑或任何其他内容:
@Component
@Aspect
public class MyRepositoryAuditor {
// pointcut on all methods with any arguments inside MyRepository
@Pointcut("execution(public * example.jpa.repositories.MyRepository.*(..) )")
public void publicRepositoryMethod() {
}
// if they return normally
@AfterReturning("publicRepositoryMethod()")
public void publicRepositoryMethod(JoinPoint jp) throws Throwable {
String methodName = jp.getSignature().getName();
.... perform logging ....
}
}
我想转换现有的 Web 服务以利用 spring-data-rest。
如何在 spring 数据剩余之上使用注入值(特别是 OAuth2 Principal)实现自定义逻辑以保持现有功能?
例如,假设我想覆盖 /person/1 的 GET 方法,以便在它继续访问 return 人 1 的数据之前联系审计 Web 服务。
现在,在使用 spring-data-rest 之前,我会:
@RequestMapping(value = "/person/{id}", method = RequestMethod.GET)
public void getPerson(@RequestBody ...., Principal principal)
{
/* Let Big Brother know that principal.getName() is doing this */
return thePerson;
}
我如何使用 Spring Data Rest 生成的端点做这样的事情?
感谢您的建议。我发现在这种情况下(对我来说)最有效的是 Dave Syer 建议的,并且只使用 AspectJ。
最后,这将允许您向 Spring Data JPA 存储库的方法添加自定义日志记录逻辑或任何其他内容:
@Component
@Aspect
public class MyRepositoryAuditor {
// pointcut on all methods with any arguments inside MyRepository
@Pointcut("execution(public * example.jpa.repositories.MyRepository.*(..) )")
public void publicRepositoryMethod() {
}
// if they return normally
@AfterReturning("publicRepositoryMethod()")
public void publicRepositoryMethod(JoinPoint jp) throws Throwable {
String methodName = jp.getSignature().getName();
.... perform logging ....
}
}