使用Spring Data Rest时具有注入值的自定义逻辑

时间:2015-02-17 15:42:33

标签: java spring-mvc spring-security spring-data-rest spring-security-oauth2

我想转换现有的Web服务以利用spring-data-rest。

如何在弹簧数据休息之上实现具有注入值(特别是OAuth2 Principal)的自定义逻辑以保持现有功能?

例如,假设我想覆盖/ person / 1的GET方法,以便在继续审核人员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生成的端点执行此类操作?

1 个答案:

答案 0 :(得分:1)

感谢您的建议。我发现在这种情况下对我来说最有效的是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 ....
    }
}