- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有一个 Wildfly 10 JEE 应用程序和一个使用远程 EJ 调用与服务器通信的 java 胖客户端。身份验证是使用 wildfly 服务器中的自定义登录模块完成的。
现在我们需要用密码过期的概念来增强这个登录模块。每当密码过期时,用户必须在登录过程中更改其密码。登录模块使用 JAAS 回调和 JAAS 回调处理程序。据我所知,我们可以在登录模块中使用 javax.security.auth.callback.TextInputCallback 在执行登录时向用户请求新密码。
这如何与远程处理集成。我们的胖客户端如何接收 TextInputCallback 以提供请求的输入?我想我们必须在客户端注册一个自定义的 CallbackHandler 来处理回调,但我还没有找到任何关于如何使用 Wildfly 执行此操作的文档。任何人都可以给我关于此类文档的提示或有关如何解决此问题的示例吗?
最佳答案
在我看来你走错了方向。使用您将密码更改放入 LoginModule 的方法存在一些问题。
TextInputCallback
请求新护照至少很奇怪。TextInputCallback
旨在要求用户提供常规文本而不是密码,例如第二个身份验证因素,如(基于时间的)PIN实现 CallbackHandler
的客户端不知道它是一个密码,当显示在屏幕上时可能必须屏蔽该密码。请记住,通常对于密码更改,您需要经过身份验证/授权的用户,该用户必须通过重新输入他的旧密码来确认密码更改并且通常还提供第二个字段,用户可以在其中重新输入他的新密码。只有一个 xxxCallback
似乎还不够。
即使是控制流也不应该使用 Exceptions
我建议使用 CredentialExpiredException
来向客户端发出用户必须更改的信号密码。这也是 Oracle 在 WebLogic JAAS Examples 之一中执行此操作的方式。
在我的所有评论之后,如果您仍然想要/需要将其放入自定义 LoginModule
中,那么我建议定义您自己的自定义 Callback
例如 PasswordChangeCallback
或 ConfirmPasswordCallback
、NewPasswordCallback
、VerifyNewPasswordCallback
您只需将它们添加到自定义 LoginModule
即可,无需注册它们。请记住,标准客户端可能会遇到这些额外回调的问题。然后,您的客户端必须实现相应的 CallbackHandler
。
在 JAAS 中,有两种方法可以自定义使用的 CallbackHander
* 通过配置自定义默认 CallbackHandler
来自CallbackHandler API documentaion
A default CallbackHandler class implementation may be specified in the auth.login.defaultCallbackHandler security property. The security property can be set in the Java security properties file located in the file named /lib/security/java.security. refers to the value of the java.home system property, and specifies the directory where the JRE is installed.
或者作为参数传递给 LoginContext
的构造函数。LoginContext
提供了两个接受 CallbackHandler
public LoginContext(String name, CallbackHandler callbackHandler)
throws LoginException
public LoginContext(String name, Subject subject,
CallbackHandler callbackHandler) throws LoginException
参见 LoginContext API Documentation
How does it integrate with removing?
它应该和你已经做过的一样。区别不大。
How does our fat client receive the
TextInputCallback
?
通过CallbackHandler
接口(interface),类似于PasswordCallback
。您提到登录模块使用 CallbackHandler
。
void handle(Callback[] callbacks)
如果您想知道如何实现handle
方法CallbackHandler
API Documentation还提供了 CallbackHandler
handle
方法的实现示例。
关于java - 将 'password expiration' 信息从 Wildfly 服务器身份验证模块传递到远程 EJB 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004932/
我需要审核 ejb bean 的调用。说审计我的意思是将当前登录的用户、方法名称、附加描述等信息写入数据库。我决定使用 CDI 装饰器来做到这一点: @Decorator public class A
当我使用 EJB 3.0 部署 Web 应用程序时,我看到了以下警告: WARNING: jar 'E:\mws\MCDS\portal\portal-web\target\portal-web-1.
我正在学习 EJB,当尝试使用 junit 测试它时,出现以下错误 cd.espoirmur.Ejb.InterfaceEjbLocal_80488159 Jun 03, 2016 10:33:58
是否可以在另一个 EJB 中使用 @EJB?我现在正在尝试这样做,但我的 EJB 最终为空。我将在示例中概述我的问题。 @Stateless @LocalBean @Local(LoginServic
我已通读 article试图理解为什么要在客户端和实体 bean 之间有一个 session bean。是不是因为让客户端直接访问实体bean,就让客户端对数据库一清二楚了? 因此,通过使用中间人(
我们正在尝试在具有两个节点的以域模式运行的 Wildfly 中查找远程 EJB。 设置是这样的: Wildfly 节点 1: 模块 A:EJB 客户端 模块 B:远程 EJB Wildfly 节点 2
我正在使用 Jboss 7,并且有两个单独的部署,它们都包含单例 EJB。 我需要一个 EJB 才能访问另一个 EJB 并能够调用其方法,但是,当应用程序服务器启动并尝试部署它们时,它似乎无法保证哪个
可能最好的方法是手动完成。但是在大型项目中,您需要一些工具来帮助您。正是这个想法促使我搜索了一个工具。 是否有任何 EJB 迁移工具可用于将 EJB 2.0 迁移到 3.x。 最佳答案 它的开发时间很
I am migrating Ejb 2.1 to Ejb 3.1. I changed Java Version from 1.6 to 1.8, and Ejb Version from 2.1
我已经使用 @ActivationConfigProperty 配置了消息目标类型、名称等。在 EJB 3.0 中,但我想配置 MDB使用部署描述符 ( ejb-jar.xml ),就像在 EJB 2
假设我有两个 EJB jar:A.jar 和 B.jar。我可以使用 CDI 将不是 EJB 的实用程序类 Autil 注入(inject) A.jar 中的 POJO 到 B.jar 中的 EJB
我有一个需要配置不同的现有项目。这需要在没有重大代码更改的情况下发生。我实际上希望我只能通过配置以某种方式做到这一点。在过去的 2 到 3 天里,我一直在阅读我能找到的关于这个问题的所有内容。我了解
我有一个非常简单的带有maven的ejb 3.0模块,它只有两个 session bean,一个是无状态的,另一个是单例的...当我尝试在Glassfish 3.0服务器上部署该项目时,我得到了这个异
我们在微服务中看到的是一个孤立的组件,通过协议(protocol)通过网络与该组件的父消费者进行通信。 我们在 EJB 1.0 中看到了非常相似的模式。 我的问题是:微服务架构模式是否类似于 EJB
我在 Java EE6 Singleton Session Bean 中有一个方法,它每 30 秒由 @Schedule(...) 计时器调用。这按预期工作,直到在方法中抛出并捕获异常(异常在 try
我正在 JDeveloper 11.1.1.4 中开发一个 JAX-WS WebService,它应该使用之前部署到 WebLogic 服务器的 JAR 中的 EJB。 WebService项目和EJ
我正在尝试使用 JAX-RS 注释将一些 EJB 公开为 REST Web 服务。当我部署 war WEB-INF/lib 中包含 EJB Jar 的文件到 Wildfly 8,我可以在 Web 管理
我是 EJB 方面的新手,但我已经获得了 EJB 级别的提升。 该层由一个 EJB 组成,它公开可用的操作: @Stateless(name = "myejb") public class Facad
假设我想创建一个我将在未来项目中使用的库,但我还想在该库中包含引用其他 EJB 等的 EJB。该库还将包含简单的 Java 类。最好的方法是什么?在这种情况下如何定义依赖关系?我想我会用注释来定义它们
我想知道是否可以按照这些思路做一些事情: 1)服务器端(EJB类) @Statefull public class SomeEJB implements SomeEJBRemote { @Resour
我是一名优秀的程序员,十分优秀!