gpt4 book ai didi

java - Java EE/JBoss AS 6 中的预身份验证用户

转载 作者:行者123 更新时间:2023-12-01 15:42:43 26 4
gpt4 key购买 nike

我正在将一些 Java EE 模块从 Spring 迁移到 EJB,现在面临着在调用服务方法之前需要某种预身份验证的问题。

这个问题其实很简单。调用来自内部协议(protocol)处理程序(某些线程启动专有协议(protocol)处理程序并使用自定义 TCP 协议(protocol)接收请求)。该连接尚未对用户进行身份验证,并且接下来想要调用服务方法。该服务方法需要主体信息(用户名)进行处理。

因此,在 Spring 中,我们只是将 SecurityContext 推送到本地线程,并在调用完成后将其删除。

协议(protocol)处理程序 -> 设置 SecContext -> 调用 -> 删除 SexContext -> 结束

Java EE/JBoss 中有类似的东西吗?我知道有“@RunAs”构造,但我不知道它们是否可以以编程方式使用。或者有没有办法使用 JAAS LoginContext 类“登录”?但是我该如何配置 JAAS 呢?

最佳答案

如果这纯粹是在 JAAS 上下文中获取身份的问题,那么您应该能够执行以下操作:

final String username; // get this from somewhere
Princpal principal = new Principal() {
public String getName() {
return username;
}
};
Subject subject = new Subject(true, Collections.singleton(principal), Collections.emptySet(), Collections.emptySet());
Subject.doAs(subject, new PrivilegedAction<Void>() {
public Void run() {
// do your method call here
}
});

请注意,您可以通过将 PrivilegedAction 绑定(bind)到 Void 以外的类型来返回该值,并通过实现 PrivilegedExceptionAction 来引发异常。

显然,如果您对主体是什么有更复杂的了解,您可以使用它(实现 toString、hashCode 和 equals 将是一个好主意)。

关于java - Java EE/JBoss AS 6 中的预身份验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7770316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com