首页 > 解决方案 > JAAS 和 Web 服务授权:获取登录用户

问题描述

我有一个通过 JAAS 登录的 JSF 应用程序。它工作正常。

现在,我的页面调用了一个 REST Web 服务。我需要知道是谁提出了请求。

在请求的标题中,我有:

Cookie = JSESSIONID=XBHZuYnzgkGyQSR8kBLNSks_s7nuXAMli7Gp-9Mn.dlicitra; _ga=GA1.1.1590792307.1560863707

Web 服务在无状态 EJB 中实现。方法是:

@Path(value = "myservice/{id}")
@GET
@Produces(value = "application/json")
public List<Records> getServices(
        @HeaderParam(value = "Cookie") String cookie,
        @PathParam(value = "id") Long id){
    return ... ;
}

如何从cookie字符串中获取登录用户?

标签: javarestejbjaas

解决方案


正如评论中所解释的,我不会使用解析或解码 cookie 的 SessionId 进行修改,而是使用 Java EE 的安全 API 内置解决方案,将其SecurityContext注入 EJB 并从中获取 userPrincipal:

@Context
private SecurityContext securityContext;

在你的方法中:

Principal principal = securityContext.getUserPrincipal();

也可以看看:

Baeldung 关于 Java EE 8 安全 API 的帖子


推荐阅读