- PR -

JSF Tomcatでフォーム認証

投稿者投稿内容
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-11-23 23:08
こんばんは、

Tomcatでフォーム認証させたいのですが、
JSFですと、
真っ白な画面へ遷移します。
----
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=shift_jis"></HEAD>
<BODY></BODY></HTML>
----
web.xmlの設定は、
----
<!-- Define a Security Constraint on this Application -->
<security-constraint>
<web-resource-collection>
<web-resource-name>User Auth</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>myrole</role-name>
</auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>FORM</auth-method>
<realm-name>User Auth</realm-name>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/error.jsf</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>myrole</role-name>
</security-role>
----
といった具合です。

何かおかしいでしょうか?
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-11-24 09:38
同じ現象か分かりませんが,SunのJava Forumの方にwelcome-fileにaaa.jsfというファイル
名をを指定できない,というトピックが出ていました.
そちらの方はTomcatのバグということです.
回避策としてはいったんbbb.jspで受けてそこからjsp:forwardでaaa.jsfを呼べばよいらしいです.
form-login-pageとform-error-pageで同じことを試してみてはいかがでしょうか?
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-11-26 17:17
すいませんでした。
画面が真っ白になるのは、例外がスローされていたためでした。

改めて...

JSFでTomcatのフォーム認証させたいのですが、
----
<h:inputText id="j_username" value="#{user.userId}" required="true" />
<h:inputSecret id="j_password" value="#{user.password}" required="true" />
----
としても、<input>のnameは、
login:j_username
login:j_password
となってしまうので、
----
<f:verbatim><input type="text" name="j_username" /></f:verbatim>
<f:verbatim><input type="password" name="j_password" /></f:verbatim>
----
としています。

さらに、
----
<h:form id="login">
 :
<h:commandButton id="loginBtn" type="submit" value="ログイン" action="j_security_check"/>
 :
</h:form>
----
としても、<form>のactionは、
/login.jsf
となってしまうため、
----
<f:verbatim><form id="login" action="j_security_check"></f:verbatim>
 :
<f:verbatim><input type="submit" value="ログイン" /></f:verbatim>
 :
<f:verbatim></form></f:verbatim>
----
としています。

これで、よいのかはわかりませんが、

エラーの場合、ちゃんと/error.jsfへ飛んでくれますが、
認証できるユーザー名、パスワードを入力すると、
----
HTTPステータス 403 - 要求されたリソースへのアクセスが拒否されました

--------------------------------------------------------------------------------

type ステータスレポート

メッセージ 要求されたリソースへのアクセスが拒否されました

説明 Access to the specified resource (要求されたリソースへのアクセスが拒否されました) has been forbidden.
----
となってしまいます。
どのあたりが怪しいでしょうか?
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-11-26 21:53
JSFを使った場合は<form>や<input>を自分でレンダリングしないと
j_security_checkの仕様に沿えないので仕方ないと思いますよ。
私もつい最近似たような方法で作りました(JBossですけど)。

#TomahawkのforceIdを使えばできるかもしれませんね

引用:
エラーの場合、ちゃんと/error.jsfへ飛んでくれますが、
認証できるユーザー名、パスワードを入力すると、
----
HTTPステータス 403 - 要求されたリソースへのアクセスが拒否されました



認証されたユーザーが正しいロールを持っていることを確認されていますか?
henachoco
常連さん
会議室デビュー日: 2005/11/21
投稿数: 29
お住まい・勤務地: 新ハンドル:t_yamo
投稿日時: 2005-11-27 15:52
件名が「JSF Tomcatでフォーム認証」なので的外れなレスかもしれませんが、このスレッドが「技術的な興味」ではなく「実務上の解決方法」を探しているのであれば、「ログインページを非JSF(普通のhtmlとかjsp)で作り、ログイン成功後からJSFベースのアプリケーションに移行する」という形でも良いかと思います。
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-11-28 00:46
アクセス拒否の件は、ロールの設定の不備を修正しまして
解決いたしました。ありがとうございました。

で、ご指摘のあった<form-login-page>をJSFにするのは、
私も向いていないなぁと思ったのですが、このページで
managedBean:sessionに値をセットする必要があったので、
このようにしました(が、うまくいっていません)。

■login.jsp
コード:
	<h:inputText id="userId" value="#{user.userId}" />
	<h:inputSecret id="password" value="#{user.password}" />
	<h:commandButton id="loginBtn" type="submit" value="ログイン" action="#{user.login}"/>



■faces-config.xml
コード:
     <navigation-case>
       <from-outcome>securityCheck</from-outcome>
       <to-view-id>/securitycheck.jsp</to-view-id>
     </navigation-case>



■securitycheck.jsp
コード:
<jsp:forward page="j_security_check">
	<jsp:param name="j_username" value="#{user.userId}" />
	<jsp:param name="j_password" value="#{user.password}" />
</jsp:forward>



securitycheck.jspの書き方がJSFの流儀に沿っていないので、
そのあたりも問題もあるかと思いますが、
このようなエラーになります。
----
HTTPステータス 404 - /hoge/j_security_check

--------------------------------------------------------------------------------

type ステータスレポート

メッセージ /hoge/j_security_check

説明 The requested resource (/hoge/j_security_check) is not available.
----

解決策はございますでしょうか?
よろしくお願いいたします。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-11-28 11:08
引用:

で、ご指摘のあった<form-login-page>をJSFにするのは、
私も向いていないなぁと思ったのですが、このページで
managedBean:sessionに値をセットする必要があったので、


試したわけでなくて思いつきのレベルで恐縮ですが,もしマネージドビーンに設定するの
が目的であれば,faces-config.xmlで初期値として指定してはどうでしょうか?

認証ページはJSFを使わずに通常のJSPで作っておいて,faces-configはこんな感じかな.
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>Userbean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>userId</property-name>
<value>#{param.j_username}</value>
</managed-property>
<managed-property>
<property-name>password</property-name>
<value>#{param.j_password}</value>
</managed-property>
</managed-bean>

#もしうまく行ったら,ぜひサンプルコードを教えてください ^o^)
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2005-12-01 22:51
すいません、ちょっと時間が空いてしまいました。

faces-config.xmlで値をセットする方法を試してみましたが、
セットされません。Exceptionもでていません。

<value>#{param.j_username}</value>

<value>test</value>
などとすると、当然ですがあたいがセットされますが。

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