質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

JBoss Application Server

JBoss Application Server (JBoss AS)はフリーソフトウェア・オープンソースであるJava EEをベースとした、クロスプラットフォームアプリケーションサーバーです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2573閲覧

セキュリティ制約(security-constraint)上の画面遷移について

corporal_cregg

総合スコア14

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

JBoss Application Server

JBoss Application Server (JBoss AS)はフリーソフトウェア・オープンソースであるJava EEをベースとした、クロスプラットフォームアプリケーションサーバーです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/05/30 12:16

編集2017/05/30 12:42

###前提・実現したいこと
お世話になっております。

WildFly上で稼働するWebシステムを開発しているのですが、
ログイン後の画面遷移に不具合があり、原因がわからず困っております。

###発生している問題

ログイン時の処理を行うマネージドビーンクラスで
次の画面へリダイレクトする処理を書いており、実際その通りに画面遷移するのですが、
遷移したその画面からさらに他の画面へ遷移しようとすると(画面上のリンクのクリック)、
ログイン画面に戻されてしまいます。
(ただしブラウザのURL欄は遷移しようとした画面のURLを示しているのが謎。。)

ログイン画面以外の画面はすべて、web.xmlのsecurity-constraintに定義しているURLパターンに合致しています。

###試したこと
ログイン認証のしくみはデータベース(PostgreSQL)を利用しており、
認証の機構自体は意図したとおりに動作していると思われます。
web.xmlのauth-constraintに定義されているロールのユーザでログインできますし、
定義されていないロールのユーザでログインしようとすると、503エラーで弾かれるので。

GlassFishでも試しましたが、全く同じ事象が発生しているので、
WildFlyに原因があるのではなく、基本的な設定を見落としているのかもしれません。

原因をご存じの方がいらっしゃいましたら
お知恵をお貸しいただけますでしょうか。

以上よろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
OS:Windows10
Javaバージョン:1.8.0_131
アプリケーションサーバ:WildFly 10.1.0.Final

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

思い付いた点を書かせて頂きます。
リンク表記をcommandButtonで実装し、actionで指定したBackingBeanの戻り値に該当のURLを書いてみてはどうでしょうか。CDI経由とすれば動作するのではないかという期待からです。

リンクにJSFタグ(h:link h:commandLink)を使用されてみてはどうでしょうか。

ヒントになるか判りませんが、自環境で動作しているサンプルプログラムのweb.xmlについて関連しそうな箇所を抜粋してみました。

html

1 <servlet-mapping> 2 <servlet-name>Faces Servlet</servlet-name> 3 <url-pattern>/faces/*</url-pattern> 4 </servlet-mapping> 5 <security-constraint> 6 <display-name>testdisplay</display-name> 7 <web-resource-collection> 8 <web-resource-name>アプリケーション名</web-resource-name> 9 <description>aaaaaaaa</description> 10 <url-pattern>/faces/info/*</url-pattern> 11 <http-method>GET</http-method> 12 <http-method>POST</http-method> 13 </web-resource-collection> 14 <auth-constraint> 15 <description>ログイン認証後にリソースを利用できるロール</description> 16 <role-name>admin</role-name> 17 <role-name>user</role-name> 18 </auth-constraint> 19 <user-data-constraint> 20 <description>HTTPS接続する場合はCONFIDENTIALに変更する</description> 21 <transport-guarantee>NONE</transport-guarantee> 22 </user-data-constraint> 23 </security-constraint>

投稿2017/05/31 03:28

編集2017/05/31 11:08
BlueMoon

総合スコア1339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

corporal_cregg

2017/05/31 09:18

コメントありがとうございます。 元々h:linkタグで実装していましたので、 ご教示頂いた通り、h:commandLinkと、h:commandButtonでも試してみました。 が、今のところ結果は変わらずです。 もう少し色々と試してみます。
corporal_cregg

2017/06/01 03:32

web.xmlのご提示ありがとうございます。 こちらの環境との違いは、http-methodタグがないくらいですね。 今の事象は、ログイン画面を経由せずに、(ブラウザのURL欄に直接アドレスを張り付けるなどして)直接該当の画面の表示を試みようとしたときと同じ動きに見えるので、ログインしたにも関わらず、認証されたという情報が何らかの理由で消えている?のではないかと感じています。
guest

0

自己解決

自己解決しました。
ログイン直後に、ログアウト処理が走っていたことが原因でした。(以下のコードのコメント行)

<!-- -->で囲っていてもEL式が評価されてしまっていたようです。JSFは詳しくないのですがそんなものなんでしょうか?

コメント行を削除したところ、正しく画面遷移が行われるようになりました。

コメントをいただきましたBlueMoon様ありがとうございました。

top.xhtmlより抜粋

<nav class="navbar navbar-inverse"> <a class="navbar-brand" href="#">〇〇〇〇 業務システム</a> <h:form class="navbar-form pull-right"> <p class="span2 navbar-text">#{loginSession.role.roleName}</p> <p class="span2 navbar-text">#{loginSession.userAccount.userName}</p> <h:commandButton class="btn btn-default" value="ログアウト" action="#{loginBean.logout()}" /> <!--<input type="submit" class="btn btn-default navbar-btn" jsf:value="ログアウト" jsf:action="#{loginBean.logout()}" />--> </h:form> </nav>

投稿2017/06/05 05:03

corporal_cregg

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問