- PR -

フォーム認証での情報の取得

1
投稿者投稿内容
るーく
会議室デビュー日: 2002/05/06
投稿数: 3
投稿日時: 2002-05-06 20:11
はじめまして。るーくといいます。
いつも読ませてもらっています。
Java、Webシステムに関して経験が浅く、自分なりに調べてはみたのですが、ど
うしても解決できなかったので書き込んでみました。実現しようとしている機能は以下の
内容です。

「weblogic6.1のフォーム認証を使用して、自分で追加した項目の情報を
サーブレットで取得したい。」というものです。

フォーム認証のhtml画面にはユーザ名、パスワード、メールアドレスを設定しようと
考えています。
認証直後、web.xmlの<welcome-file-list>タグでサーブレットを呼び出し、
サーブレット内でユーザ名、メールアドレスを取得したいのですが、マニュアルに
そってサンプルを作成したところユーザ名の取得は
javax.servlet.http.HttpServletRequestのgetRemoteUserでできたのですが、
メールアドレスの方が取得できません。getParameter等、試してみたのですが、取得
できませんでした。
ユーザ名はマニュアル通り
<input type="text" name="j_username">としています。
メールアドレスは自分で作成した
<input type="text" name="mlad">のインプットタグを使用しています。

どなたか上記データの取得方法(API等)をご存知のかたはいらっしゃらないでしょうか?
もし、いらっしゃればご教授ねがえないでしょうか?
よろしくお願いします。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-05-07 10:41
フォーム認証って何だろうという気はしますが、ごく普通のHTMLフォーム+何らかの認証機能まで、でしょうか。

ごく普通のHTMLフォームであるなら、javax.servlet.ServletRequest#getParameter()で
いけそうですけど、それでだめならくっついている認証機能で何かやってるんでしょうかね。

試しに、javax.servlet.ServletRequest#getParameterNames()で何が渡されているのか
調べてみてはいかがでしょう。

ちなみに、Servlet APIは以下。
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/index.html
るーく
会議室デビュー日: 2002/05/06
投稿数: 3
投稿日時: 2002-05-07 15:05
お返事ありがとうございます。m(__)m

言葉が足りずに申し訳ありません。
試してみましたが、データを取得できませんでした。
Enumeration e = req.getParameterNames();
while (e.hasMoreElements()) {
 System.out.println("result : [" + e.nextElement() + "]");
}
近くにあったAPIを一通り試しましたが駄目でした。(・・;)

JSP+Servletですが、JSP→Servletの間でWebLogicに付属(?)
されているベーシック認証機能を使用しており、その辺が怪しいのかな?と思っています。
再度、調査して見ます。ありがとうございました。
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-05-08 12:27
>フォーム認証って何だろうという気はしますが、
これはServlet Specification v2.2等のForm Based Authenticationの実装の
ことをおっしゃってますね。
Specificationをお読みいただくとお分かりになると思いますが、Spec上は
フォーム認証を利用する場合の認証フォームにおいて、以下の要件を満たす
ようにと規定されています。
ユーザ名は j_username
パスワードは j_password
FORMのactionは j_security_check.
しかしながら、同一フォーム内のそれ以外の項目に関しての規定や、それら
(ユーザ名、パスワード以外)がPOSTされた場合、認証完了後のページに
どのような形で反映するかということは規定されていません。言い換えますと、
実装に依存するということになります。

Tomcat3.2.Xでは、j_security_checkに対してPOSTされた、Webパラメタは
認証完了後のページに引き継がれていません。
>近くにあったAPIを一通り試しましたが駄目でした。(・・;)
確かに、WebLogicでも同様のようです。

当方がTomcatで実施しているワークアラウンドは、
フォーム認証で指定した認証フォームのリクエスト先を自前のServlet等に
しておいて、その中で必要なパラメータに対する処理をしておいてから、
j_security_checkにforwordする、以下のような方法です。

============= web.xmlで指定した認証ページ ================

<form action="userauth.jsp" method = "POST" name="AspexLogin">
USER ID:<input type="text" name="j_username" value=""/><br/>
パスワード:<input type="password" name="j_password" value =""/><br/>
メール:<input type="text" name="mlad" value=""/><br/>
<input type = "submit" value = "login"/>
<input type = "reset" value = "reset"/>
</form>

==========================================================

============= userauth.jsp ===============================
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%
session.setAttribute( "mlad", (String)request.getParameter("mlad") );
%>
<jsp:forward page='j_security_check'/>
==========================================================

============= 認証完了後のページ =========================
<%@ page contentType="text/html; charset=Shift_JIS" %>
<html>
<body>
<% String mlad=(String)session.getAttribute("mlad");
if( mlad == null ) mlad = "";
%>
あなたのメールアドレスは<%= mlad %>です。
</body>
</html>
==========================================================

しかしながら、WebLogic6.1では、<jsp:forward page='j_security_check'/>は
機能しないようですので、この方法は使えないようです。
そこで、自前の認証ロジックを使用するか、ユーザ名、パスワード以外の項目を
別なFORMにする(ページを分ける)しか手がないようです。

K.Nakagome
るーく
会議室デビュー日: 2002/05/06
投稿数: 3
投稿日時: 2002-05-08 13:33
返信ありがとうございます。

そうでしたか。マニュアル等を参照して簡単に作成できるのかなと思っていたのです
が・・・(実際にユーザID以外の値を取得しているサンプル、API等は記述され
ていませんでした。)(;_;)

ページを分ける等の方式を考えたいと思います。
大変、ありがとうございました。m(__)m
1

スキルアップ/キャリアアップ(JOB@IT)