java - 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字符串中获取登录用户?
解决方案
正如评论中所解释的,我不会使用解析或解码 cookie 的 SessionId 进行修改,而是使用 Java EE 的安全 API 内置解决方案,将其SecurityContext
注入 EJB 并从中获取 userPrincipal:
@Context
private SecurityContext securityContext;
在你的方法中:
Principal principal = securityContext.getUserPrincipal();
也可以看看:
推荐阅读
- openvas - Greenbone 社区版 (GCE) 不给出结果
- javascript - 如何防止超过 2 个 tokbox 客户端?
- r - 划分 2 行以创建新行
- php - 从一个下拉列表中选择多个项目并插入到多行数据库中
- google-cloud-firestore - Firestore 和自动增量 ID
- arduino - 如何使 .print() 宏默认使用 F() (Arduino)
- python - 从 C++ 运行 .py 脚本
- node.js - 我无法处理 net.createServer 中的错误事件
- react-native - 如何在样式(使用样式组件)视图中显示视图 - React Native
- php - 为什么我应该把省略号放在函数的参数中?