3

私はクライアント IP とユーザー ID およびパスワードを JAAS ログイン ページから Web コードの JAAS ログイン モジュール実装に渡す方法を検討してきました。JAAS では、ユーザー ID とパスワードのみをログイン モジュールに渡すことができます。私の考えは、IPアドレスをユーザーIDに追加してフォーム送信を呼び出すJavaスクリプトコードを用意することです。これを行うための適切な Java スクリプト コードがありません。手伝ってくれますか?

Web ページには、j_userid と j_password の 2 つの入力フィールドがあり、JAAS コードはこれらを見て認識しています。フォームを送信する前に、j_userid フィールドに IP アドレスを追加するには、どの JavaScript コードを使用できますか。「ip-address#userid」を考えていたので、ログイン モジュールでユーザー ID から IP アドレスを削除しました。

4

2 に答える 2

1

これら 2 つの JavaScript 関数を作成しました。

function addIpSubmit() 
{                 
    var theForm = document.getElementById("login_form");
    var userName = theForm.username.value;
    userName = theForm.clientip.value + "#" + userName;
    theForm.j_username.value = userName;
    if( validate_required( theForm.username, "User ID is required" ) )
    {
        if(  validate_required( theForm.j_password, "Password is required" ) )
        {
            theForm.submit();
        }
    }
}  

function validate_required( field, alerttxt )
{
    with (field)
    {
        if (value==null||value=="")
        {
            alert(alerttxt);
            return false;
        }
        else
        {
            return true;
        }
    }
}

addIpSubmit は、ログイン ボタンから呼び出されます。IP アドレスを非表示フィールドに入れる Bean があることがわかります。j_username JAAS フィールドも隠され、addIpSubmit() 関数によって入力されます。

<input id="clientip" type="hidden" name="clientip" value="#{loginMBean.ip}"/>
<input id="j_username" type="hidden" name="j_username" />
<input type="button" name="OtherLogin" value="Login" onclick="addIpSubmit()" />

IP をユーザー名に変更し、JAAS 送信関数を呼び出します。次に、ログイン モジュールで、IP アドレスとユーザー名を取得します。

String userid = username;

if( username.contains( "#" ) )
{
    ip = username.split( "#" )[0];
    userid = username.split( "#" )[1];
}

FacesContext.getCurrentInstance().getExternalContext().getRemoteUser() に ip#userid が含まれるようになったことを覚えておいてください。

于 2009-07-30T01:41:24.060 に答える
0

申し訳ありませんが、プレーン Javascript でクライアント側で IP を取得する方法はないと思います。

サーバー側でリモート IP をテストしても、クライアントとサーバーの間のインフラストラクチャ (ロード バランサー、プロキシなど) を制御していない場合、おそらく解決策にはなりません。リモート IP がクライアントの IP であると確信している場合は、Tomcat バルブまたはサーブレット フィルターをハッキングできるはずです。

于 2009-07-29T13:35:24.290 に答える