REST服务仅返回当前与用户相关的资源

时间:2016-07-24 07:36:20

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

我使用Spring MVC(RestControllers)实现了一个REST服务,该服务具有基于令牌的安全性(使用Spring Security)。如何根据用户身份过滤资源?我们假设用户有一些报告。如何通过拨打 / reports 来仅让授权用户看到他的报告?

显然我可以让userId成为请求参数或路径变量,但有些东西告诉我这是一个不好的做法。

我认为我可以使用Spring Security功能实现这一目标,但我究竟能做到这一点,更重要的是,哪里是应用此类过滤的最合适的地方?控制器是否应该对传递用户身份的服务执行调用,还是应该以某种方式在存储库级别检索(我使用Spring Data JPA)? 提前致谢

1 个答案:

答案 0 :(得分:0)

每当用户成功登录时,您都有Authentication个对象。 它包含Object principal Object credentialsSet authorities

您只需覆盖UserDetailsService即可为经过身份验证的用户添加新参数。将身份验证中的userId添加为shown in blog

现在你做的时候

SecurityContextHolder.getContext()。getAuthentication()。getPrincipal()     这将返回spring安全性的User对象。     您可以从此处获取用户ID,并在控制器中使用它来执行必要的操作。