gpt4 book ai didi

jakarta-ee - EJB 3.1 中的简单例份验证

转载 作者:行者123 更新时间:2023-12-04 05:28:03 25 4
gpt4 key购买 nike

我有一个 EJB 3.1 应用程序和与该应用程序连接的 java 客户端。
我需要创建用户身份验证。

例子:

class LoginBean{

public remoteLogin(String login, String password){
// create user context with user ID
}
}

class BeanAbc{
public remoteSecureMethod(){
// get user context - if no context throw error
// get user ID/login from user context and do some additional logic..
}
}

用户凭据存储在数据库中。我正在使用 Glassfish 服务器。如何存储用户上下文?什么是最好的解决方案?有没有简单的框架?

最佳答案

基本上(据我所知)EJB 3.1 中的客户端应用程序安全性仍然与 2.x 中的一样,因此您应该找到示例。

您需要设置的内容:

  • 服务器端的 jaas 登录模块(正如您在 Web 应用程序中看到的那样)
  • 确定如何处理身份验证的客户端属性文件
  • 客户端回调,为客户端身份验证进程提供凭据
  • 使用类路径
  • 上的属性文件启动客户端

    这是 jboss-as 的示例,但我认为您可以将其翻译到其他服务器,因为这个想法是通用的:
    # file auth.conf on the client 
    adb {
    // jBoss LoginModule
    org.jboss.security.ClientLoginModule required
    ;
    };

    这基本上说明了登录上下文 adb客户端登录模块需要成功。此上下文 adb链接到服务器端的相应应用程序 jaas 上下文。

    在代码中,您像这样设置登录:
    CallbackHandler cbh =
    new LoginCallbackHandler(user,pass.toCharArray());
    try {
    LoginContext lc = new LoginContext("adb",cbh);
    lc.login(); // <--- triggers the show in the client
    }
    catch (LoginException e) {
    System.err.println("Login failed: "+e.getMessage());
    }

    在 LoginContext 中,您给出上下文 adb从上面的 auth.conf 文件中。
    LoginCallbackHandler可能看起来像这样:
    package de.bsd.adb.client;
    import java.io.IOException;
    import javax.security.auth.callback.Callback;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.callback.NameCallback;
    import javax.security.auth.callback.PasswordCallback;
    import javax.security.auth.callback.UnsupportedCallbackException;

    public class LoginCallbackHandler implements CallbackHandler {
    private String user;
    private char[] pass;
    // Konstruktor
    LoginCallbackHandler(String username,char[] password) {
    user=username;
    pass=password;
    }
    // handle() does the real work and is invoked from the client container
    public void handle(Callback[] callbacks)
    throws IOException, UnsupportedCallbackException
    {
    // Iterate over the call backs
    for (int i =0 ; i< callbacks.length; i++)
    {
    // NameCallback -> pass Login-Name
    if (callbacks[i] instanceof NameCallback)
    {
    System.out.println("NameCallback");
    NameCallback nc = (NameCallback)callbacks[i];
    nc.setName(user);
    }
    // PasswordCallback -> pass Password
    else if (callbacks[i] instanceof PasswordCallback)
    {
    System.out.println("PasswordCallback");
    PasswordCallback pc =
    (PasswordCallback)callbacks[i];
    pc.setPassword(pass);
    }
    else { // unknown callback
    throw new UnsupportedCallbackException(callbacks[i],"Ouch");
    }}}

    现在您可以启动您的客户端程序
    java -Djava.security.auth.login.config=/path/to/auth.conf -cp bla my.Main

    关于jakarta-ee - EJB 3.1 中的简单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961768/

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