6

JBossAS6で実行しているアプリケーションがあります。「FORM」認証方式を使用して認証が機能しており、ユーザーは正しくログインしています。

ユーザーが正常にログインするたびに、カスタムの静的コードを呼び出せるようにしたいと思います。

残念ながら、ログインに成功するとコードを実行するリスナー、フック、またはコールバックが見つかりません。HttpSessionListenerには「sessionCreated」のイベントがありますが、これは、ユーザーが正常にログインしていなくても、ユーザーがページにアクセスするとすぐに呼び出されます。つまり、ログインフォームを表示してもイベントがトリガーされます。

ユーザーが最初に正常にログインした時点でカスタムコードを実行する方法を示すJBossAS6(または同等のもの)のドキュメントを誰かに教えてもらえますか?

前もって感謝します。

4

3 に答える 3

3

ServletFilter保護されたサーブレットの前に実装を追加できます。

呼び出しごとに、フィルターはでブールフラグをテストnotFirstCallHttpSessionます。

フラグが存在しない場合、リクエストはユーザーのログイン後の最初のリクエストです。指定されたジョブを呼び出してnotFirstCallから、このセッションでジョブが完了したことを示すフラグを設定できます。

于 2012-06-24T11:25:53.680 に答える
2

私が考えることができる回避策は、CustomFormAuthenticatorそれを拡張org.apache.catalina.authenticator.FormAuthenticator してに登録することです/server/default/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml。現在、Jboss AS 7では、自分で登録できるバルブの概念が導入さCustomAuthenticatorれてjboss-web.xmlいます。

何かのようなもの..

public class CustomFormAuthenticator extends FormAuthenticator {
    @override
    public boolean authenticate(Request request, Response response, LoginConfig config) throws IOException {
        boolean authenticate = super.authenticate(request, response, config);
        //here you might need to keep track whether your custom/static code executed once or not,
        //just to avoid executing the same code again and again.
        if(authenticate) {
            int i = CustomSingleton.getInstnce().getExecuteCount();
            if(i <= 0) {
                //invoke custom code.
                //increment the count
                CustomSingleton.getInstnce().incrementExecuteCount();
            }
        }
    }
}

次に、これを「次のセクションserver/server/default/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml 追加」に登録する必要があります。entryauthenticators

<entry>
    <key>CUSTOM-FORM</key>
    <value>full.qaulified.CustomFormAuthenticator</value>
</entry>

次に、web.xmlで次のようCUSTOM-FORMになりますauth-method

<login-config>
     <auth-method>CUSTOM-FORM</auth-method>
          <form-login-config>
               <form-login-page>/login.html</form-login-page>
               <form-error-page>/login-error.html</form-error-page>
          </form-login-config>
<login-config>

お役に立てれば..

于 2012-06-25T06:47:45.320 に答える
1

javax.servlet.http.HttpSessionBindingListenerのようなものはどうですか?オブジェクトを作成し、ユーザーが正常にログインしたときに好きなように入力して、ユーザーのセッションに属性として追加します。それで:

public class User implements Serializable, HttpSessionBindingListener {
private String userId;
private Timestame logonTime;
// any additional fields

@Override
public void valueBound(HttpSessionBindingEvent event) {
// this method called when this object is attached to a session
    log.debug("user " + this.userId + "bound to a session - user logged in");
// do stuff
  }
@Override
  public void valueUnbound(HttpSessionBindingEvent event) {
// this method called when user's session ends, value unbound, etc
    log.debug("user " + this.userId + "logged off");
// do other stuff
  }

}

オブジェクトをバインドするには:

// you don't create this object until a user logs in
User userObject = new User();
userObject.setUserId();
userObject.setLogonTime();
// get your request object however you normally get it
HttpServletRequest request.getSession().setAttribute("loggedInUser", userObject);

属性が設定されると、valueBoundメソッドが呼び出されます。これは、ユーザーの追跡(ログオン/オフ情報をdbに保存するなど)にも役立ちます。

于 2012-06-23T21:28:28.147 に答える