【发布时间】:2015-03-20 21:37:12
【问题描述】:
我有一个使用 RestEasy 实现的 REST 提供程序。目前 API 使用方法级别的安全性,但我们更喜欢 Shiro 的基于 URL 的安全性。我们的应用程序使用 CDI 进行依赖注入,如果可以将当前登录的用户注入到 bean 中,那就太好了,因为这将允许我们根据用户角色改变我们的响应。
是否有任何教程或示例说明如何做到这一点?
【问题讨论】:
我有一个使用 RestEasy 实现的 REST 提供程序。目前 API 使用方法级别的安全性,但我们更喜欢 Shiro 的基于 URL 的安全性。我们的应用程序使用 CDI 进行依赖注入,如果可以将当前登录的用户注入到 bean 中,那就太好了,因为这将允许我们根据用户角色改变我们的响应。
是否有任何教程或示例说明如何做到这一点?
【问题讨论】:
你可以注入SecurityContext来获取UserPrincipal:
@Context
private SecurityContext securityContext;
...
Principal principal = securityContext.getUserPrincipal();
如果您需要有关用户的更多信息,您可以使用 CDI 生产者来获取用户,例如一个数据库:
public class UserProducer {
@Inject
private HttpServletRequest request;
@Produces
public User getUser() {
Principal principal = request.getUserPrincipal();
User user = db.fetchUser(principal.getName());
return user;
}
}
然后像这样注入用户:
@Inject
private User user;
【讨论】: