🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

3451閲覧

Java ServletのFORM認証で作成したログイン画面で、正しいユーザー情報を入力しても404エラーになる

MeguroHarumi

総合スコア14

Java

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/11/17 02:45

編集2019/11/18 11:42

前提・実現したいこと

サーブレット・JSPのFORM認証を用いてログイン画面を作成しようとしています。ログイン画面は正常に表示されるものの、正しいユーザIDとパスワードを入力しても404エラーになる状況です。
(本来は認証成功後にディレクトリの一覧が表示される想定です)

発生している問題・エラーメッセージ

■各設定の概要
今回はFORM認証を構築するに際して、以下の4つの設定を行いました。
①web.xml
→「WEB-INF」配下に配備
②tomcat-users.xml
→「$CATALINA_HOME/conf/」配下のファイルを設定しています。
③Login.jsp
→「WebContent」配下に配備しています
④LoginError.jsp
→「WebContent」配下に配備しています

■エラーメッセージ
エラー:HTTPステータス 404 NotFound
メッセージ:/LoginForms/j_security_check
説明:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

該当のソースコード

①web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <security-constraint> <web-resource-collection> <web-resource-name>Form Auth</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin-gui</role-name> <role-name>manager-gui</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/Login.jsp</form-login-page> <form-error-page>/LoginError.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>admin-gui</role-name> </security-role> <security-role> <role-name>manager-gui</role-name> </security-role> </web-app>

②tomcat-users.xml

<role rolename="manager-gui"/> <role rolename="admin-gui"/> <user name="admin" password="admin" roles="manager-gui" /> <user name="PersonA" password="12345" roles="admin-gui, manager-gui" /> <user name="PersonB" password="12345" roles="admin-gui" /> <user name="PersonC" password="12345" roles="manager-gui" />

③Login.jsp

<%@ page contentType="text/html; charset=UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Login Form</title> </head> <body> <form method="POST" action="j_security_check"> <table border="0"> <tr> <th align="right">User:</th> <td><input type="text" name="j_username" size="15" /></td> </tr> <tr> <th align="right">Password:</th> <td><input type="password" name="j_password" size="15" /></td> </tr> <tr> <td rowspan="2"> <input type="submit" value="Login" /> <input type="reset" value="Discard" /> </td> </tr> </table> </form> </body> </html>

④LoginError.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" %> <!DOCTYPE html> <html> <head> <meta content="text/html;"> <title>Login Error Form</title> </head> <body> Error occured. Please go back to the previous screen. [<a href="JavaScript:history.back();">** Back **</a>] </body> </html>

試したこと

①構文チェック
最低限、自己チェックを行いスペルミス等の修正を行っています。
(例)
auth-constrait → auth-constraint
"admin-gui", "manager-gui" → "admin-gui, manager-gui"

②URL周りの設定の調整
404エラーの意味は理解しており、以下のようなURLに関連しそうな設定を調整しつつトライ&エラーしていたのですが、解消しなかったため質問の投稿をしました。

<url-pattern> <form-login-page> <form-error-page>

補足情報(FW/ツールのバージョンなど)

CentOS release 6.9 (Final)
Tomcat 8.5.42

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/11/17 03:42

つづりのミスはエクリプスの機能(xsd)によるバリデーションで調べてください。
MeguroHarumi

2019/11/18 11:50

コメント頂きありがとうございました。エクリプスのxsdバリデーション、知りませんでした。非常に参考になります、ありがとうございます。ちなみに、少し調べてみた感じ日本語の情報が少ないように感じました(英語のサイトは多少見つかりました)。もし参考になるサイト等ご存じでしたら、教えて頂けると大変助かります。
m.ts10806

2019/12/15 11:43

なんの音沙汰もなくコメントもなく急に解決済みとされたので戸惑っています。どのように解決とされたのでしょうか
MeguroHarumi

2019/12/15 12:58

確認が滞っていたこと、また結果や解消法の報告が出来ておらず申し訳ございませんでした。 頂いたコメントに回答する形で記載しましたので、ご確認お願いいたします。
guest

回答2

0

FORM認証の設定内容やtomcat-users.xmlの内容、JSPの記述内容については、特に誤りはありませんでした。
おそらく、ログイン後のURLに対して、JSPやHTMLなどが未設定などはないでしょうか。

例えばWebContent内に、success.jsp を配置した状態でWebアプリケーションを起動し、

http://localhost:8080/(Webアプリケーション名)/sccess.jsp

をリクエストするとログイン画面が表示されます。
ログインが完了すると、ログイン前にリクエストしていたURLに復元するのがFORM認証の仕組みですから、無事success.jspが表示されます。

投稿2019/11/18 13:10

A-pZ

総合スコア12011

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

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

MeguroHarumi

2019/12/15 12:58

ご回答頂きありがとうございます。 ずっと確認が出来ておらず大変申し訳ございませんでした。 おっしゃる通り、ログイン後のURL("/j_security_check")に対して何も設定していないのが原因でした。 (正しいのかは分かりませんが、@WebServlet("/j_security_check")のアノテーションを持つサーブレットを用意したら、ログイン後にその画面に遷移するようにも出来ました) ただ、参考にしていた資料が古いためか、そのような状態でもディレクトリの一覧が表示されると書かれていたのですが、どうやらTomcat5.5以降はセキュリティ観点から、そのようなケースでは404エラーを返す様に改修が入ったとの事で、動作的には正しい事が分かりました。 また的確にご回答頂いたにも関わらず申し訳ありませんが、先に同等の回答があったためそちらをベストアンサーとさせて頂きます。
guest

0

ベストアンサー

404はNOT FOUND
「リクエストしたURLの先が見つからない」ことを指すので
ログイン情報が正しいかどうかではなく、遷移先やフォーム送信先のURLが間違っている(または正しく指定できていない、受け取るマッピングになっていない)のではないでしょうか。

投稿2019/11/17 02:56

m.ts10806

総合スコア80875

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

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

MeguroHarumi

2019/11/17 03:08 編集

早速のご回答頂きありがとうございます。 「試した事」に書いておくべきでしたが、404エラーの意味は理解しており、以下のようなURLに関連しそうな設定を調整しつつトライ&エラーしていたのですが、解消しなかったため質問の投稿をしました。 <url-pattern> <form-login-page> <form-error-page> 回答の中で指定頂いた下記の点は、具体的にはどこをチェックすれば良いのか教えて頂けないでしょうか? ・遷移先やフォーム送信先のURLの指定 ・遷移先やフォーム送信先のURL受け取るマッピング
m.ts10806

2019/11/17 03:31

質問編集して追記しておいてください。 >具体的にはどこをチェックすれば良いのか ・viewのformタグ ・サーブレット側のコード(アノテーション部分かとは思いますが提示されてないので分かりません)
MeguroHarumi

2019/11/18 12:07 編集

早速のご回答頂きありがとうございます。 ■viewのformタグ、サーブレット側のコード 通常であれば<form>タグの"action"属性に遷移先の画面のjspなどを指定する認識です。しかし、今回のFORM認証では「j_security_check」になっています。この「j_security_check」をアノテーションに指定したServlet等(遷移先画面)を別途作成して初めて成立するという理解であっていますでしょうか? (想定では上記の4項目を実装するとTomcatデフォルトのディレクトリリスト画面が表示される事を期待したのですが、されませんでした) 初歩的な質問で恐縮ですが、ご教示頂けたらと思います。
m.ts10806

2019/11/18 13:16

Javaのコードは一行もないということでしょうか。
MeguroHarumi

2019/12/15 12:58

コメントを頂いたのに確認が出来ておらず大変申し訳ございませんでした。 ご指摘の通り、その時点ではJavaのプログラムは存在していませんでした。 参考にしていた資料が古いためか、そのような状態でもディレクトリの一覧が表示されると書かれていたのですが、どうやらTomcat5.5以降はセキュリティ観点から、そのようなケースでは404エラーを返す様に改修が入ったとの事で、動作的には正しい事が分かりました。 また、正しいのかは分かりませんが、@WebServlet("/j_security_check")のアノテーションを持つサーブレットを用意したら、ログイン後にその画面に遷移するようにも出来ました。 「マッピングが出来ていないのでは?」という指摘から、解決に至ったのでベストアンサーとさせて頂きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問