当前位置: 首页 > 知识库问答 >
问题:

JSF2 web应用程序(JBoss)中自定义JAAS LoginModule的编程登录

濮阳景天
2023-03-14

我在服务器端JBoss EAP 6.2.0 SecurityDomain上有一个CustomLogin模块。此自定义登录模块需要三个CallbackHandler:NameCallback(Java Standard)、PasswordCallback(Java Stanstandard)和一个额外的OtpCallaback(由我自己实现,用于一次性密码)。

我现在想通过JSF2.1 web应用程序登录到这个模块。我知道这通常可以通过FORM登录、BASIC登录或通过HttpServletRequest#login登录。但他们都不让我指定用户名、密码和otp值。它们只允许输入用户名和密码。

因此,我正在寻找一种方法来进行身份验证,比如使用HttpServletRequestMethod,同时能够提供三个凭证。

非常感谢您的帮助!

N、 我已经试过了

LoginContext lc = new LoginContext("MyOtpSecurityDomain", new CallbackHandler() {

                @Override
                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
                    for( Callback callback : callbacks ) {
                        if( callback instanceof NameCallback ){
                            NameCallback nc =  (NameCallback) callback;
                            nc.setName(username);
                        } else if ( callback instanceof PasswordCallback ) {
                            PasswordCallback pc = (PasswordCallback) callback;
                            pc.setPassword(password.toCharArray());
                        } else if ( callback instanceof OtpCallback ) {
                            OtpCallback oc = (OtpCallback) callback;
                            oc.setOtp(otp);
                        }
                    }
                }
            });
lc.login();

这甚至调用了我的服务器端自定义登录模块,但不知何故,登录名不会传播到web应用程序和EJB。

共有1个答案

戚哲
2023-03-14

这似乎是不可能的,至少我无法传播JAAS主题或将其绑定到HttpSession。

我最终将OTP和密码打包成一个字符串,并将两个参数username和(密码otp)传递给HttpServletRequest#login(java.lang.String用户名,java.lang.String密码)。

不是最优雅的解决方案,但它是可行的。

 类似资料:
  • 我正在尝试创建一个自定义的KeyClope提供程序,它将为登录逻辑添加一些内容。我已经读过如何为KeyClope创建提供者(或插件),我正在与之合作的项目中已经有一个提供者(或插件),但我对它们知之甚少。 我需要为用户身份验证/授权添加自定义逻辑:我希望能够检查内部数据库中的一些字段来验证人员帐户。但是我没有找到任何关于类似情况的指南或好文章。有人能给我提供一些关于从什么开始的链接吗?为了实现这样

  • 我想更改整个应用程序组件(文本视图、编辑文本、按钮等)的字体。我发现我可以为应用程序设置样式,但在这里我无法将字体从资产文件夹放入自定义样式xml。我必须将我的自定义TTF字体从资产文件夹放到样式xml中的typeface元素中。我无法将单空间字体更改为自定义字体。我的风格是

  • 我在一个Kafka消息中使用了我自己的类,它有一堆字符串数据类型。 我想我需要编写自己的序列化器并将其提供给生产者属性?

  • 所以我现在正在做一个需要数字拾取器的应用程序。我已经创建了数字拾取器使用一个按钮textview+按钮布局。t选择器可以正常工作,但当您删除数字并尝试按下任何按钮时,此时应用程序会崩溃。

  • 我读了很多关于Office 365和Azure AD的文章,但我很困惑。这是我的问题:有几个学校拥有单独的Office 365订阅(多租户),他们的用户(教师和学生)登录MVC应用程序(独立应用程序),以访问他们的邮件、日历和其他与学校相关的功能。 我必须使用Azure AD从他们的Office 365帐户为所有这些用户创建单点登录,并将Office 365邮箱、日历和其他应用程序与此应用程序同步

  • 我们正在将一个应用程序从JBoss迁移为6到7。 这个新实例正在使用独立的ha配置文件。在以前的版本中,我们使用了一个自定义的Infinispan加载器,它将缓存条目存储到我们的自定义数据库中。 现在,在JBoss 7.1上,当尝试使用可视化管理控制台更改此配置时,它不起作用。我们在“复制缓存”的选项卡“Store Class Impl”上键入的值没有按应有的方式存储在配置文件配置中。所以,这是我