1

保護された Glassfish 3.1.2 に非常に厄介な問題があります。スタンドアロン クライアントから 2 人 (またはそれ以上) のユーザーを接続すると、EJB から呼び出し元のプリンシパルを取得しようとすると、常に最後に接続されたユーザーが表示されます。

    sessionContext.getCallerPrincipal().getName();
    

この問題について教えてください。

これが私のクライアントです:

<pre>
    public static void main(String[] args) {
        new Thread(new Runnable() {
          @Override
          public void run() {
             connectUser("userA", "pwdB");
          }
        }).start();
        new Thread(new Runnable() {
               @Override
           public void run() {
                connectUser("userB", "pwdB");
           }
        }).start();
    }
    public static void connectUser(String userName, String password) {
     try {
         ProgrammaticLogin login = new ProgrammaticLogin();
         login.login(userName, password.toCharArray());
         Context context = new InitialContext();
         MyServiceRemote myService = (MyServiceRemote) context.lookup("MyService");
         String remoteCaller = myService.getUserName();
         System.out.println("Local is (" + userName + "), Remote is (" + remoteCaller + ")");
      } catch (Exception e) {
         e.printStackTrace();
      }
    }

</pre>

これが私のEJBです:

<pre>
    @Stateless(mappedName = "MyService", name="MyServiceBean")
    public class MyServiceBean implements MyServiceRemote{
        @Resource
        private SessionContext sessionContext;
        public MyServiceBean () {
            super();        
        }
        public String getUserName() {
            return sessionContext.getCallerPrincipal().getName();
        }
    }

</pre>
4

0 に答える 0