我使用Spring MVC(RestControllers)实现了一个REST服务,该服务具有基于令牌的安全性(使用Spring Security)。如何根据用户身份过滤资源?我们假设用户有一些报告。如何通过拨打 / reports 来仅让授权用户看到他的报告?
显然我可以让userId成为请求参数或路径变量,但有些东西告诉我这是一个不好的做法。
我认为我可以使用Spring Security功能实现这一目标,但我究竟能做到这一点,更重要的是,哪里是应用此类过滤的最合适的地方?控制器是否应该对传递用户身份的服务执行调用,还是应该以某种方式在存储库级别检索(我使用Spring Data JPA)? 提前致谢
答案 0 :(得分:0)
每当用户成功登录时,您都有Authentication
个对象。
它包含Object principal
Object credentials
和Set authorities
。
您只需覆盖UserDetailsService
即可为经过身份验证的用户添加新参数。将身份验证中的userId添加为shown in blog
现在你做的时候
SecurityContextHolder.getContext()。getAuthentication()。getPrincipal() 这将返回spring安全性的User对象。 您可以从此处获取用户ID,并在控制器中使用它来执行必要的操作。