私は、認証とのTimerService @Timeout注釈についての質問がある:私たちのアプリケーション・ユーザーでEJB3.1のTimerService @Timeout現在のプリンシパル
が与えられた間隔で実行するタスクをスケジュールすることができ、彼らはタスクのリストから選択各タスクは、アプリケーション内の特定のEJBに関連付けられています。ユーザーが保存ボタンを押すと、タイマーサービスに新しいタイマーが追加されます。@ Timeoutメソッドが呼び出されると、ユーザーが指定したEJBのメソッドが@Timeoutメソッドから呼び出されます。
タイムアウトメソッドTimerserviceによって使用されている場合、現在のプリンシパルは「ANONYMOUS」です。これは、timoutメソッド内から保護されたEJBを呼び出す必要がある場合に問題になります。現在のプリンシパルとロールを、タイマーを作成したユーザーと同じプリンシパルとロールに変更することは可能ですか?
@Singleton
@LocalBean
public class TestEJB
{
@Resource
SessionContext context;
@Resource
TimerService timerService;
@Timeout
public void execute(Timer timer) throws Exception {
//Get the current username
System.out.println(context.getCallerPrincipal().getName());
}
public void createScheduledTimer(ScheduleExpression e,String timerId) throws IllegalArgumentException, IllegalStateException, EJBException {
TimerConfig tc = new TimerConfig();
tc.setInfo(timerId);
tc.setPersistent(true);
timerService.createCalendarTimer(e, tc);
}
}
@Timeout public void execute(タイマータイマー){ProgrammaticLogin programmaticLogin = new ProgrammaticLogin(); programmaticLogin.login(userName、password); – user829776
こんにちは、これはちょうど私が探していたものです、私たちはglassfishについてもアプリケーションを実行しています。私はプログラムによるログインで多くの例を見つけることができませんでした。実装は以下のようになります: ProgrammaticLogin programmaticLogin =新しいProgrammaticLogin(); programmaticLogin.login(userName、password); – user829776
はい、そうです。実装にはカスタムレルムを使用していることに注意してください(通常、Glassfishにはファイル、jdbc、およびLDAPレルムが付属しています)。もう一つは、レルムが検出できるパスワードの代わりに署名付きのトークンを渡して、「それは私たちのもの」を知ることができます。つまり、ユーザに実際のパスワードをプレーンテキストで知らせる必要はありません。 –