Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

BASIC認証について

お世話になります。佐藤です。

「StrutsによるWebアプリケーションスーパーサンプル」という本のサンプルを動かしています。
その中に、会員かどうか判断しようという2-3章があり、そのサンプルはBASIC認証できちんと動くのですが、3章(まとめ)では、ログインするというサンプルも含まれているのですが、全く認証画面が出てきてくれません。
どうしたらBASIC認証画面を出せるでしょうか?

設定したところは、
1. web.xml
  <!-- 1)security-constraintタグ -->
  <security-constraint>
   <web-resource-collection>
    <web-resource-name>Members Only</web-resource-name>
    <!-- 保護されるリソース -->
    <url-pattern>/view/*</url-pattern>
   </web-resource-collection>
   <auth-constraint>
    <!-- アクセスできるロール -->
    <role-name>user</role-name>
   </auth-constraint>
  </security-constraint>
  
  <!-- 2)login-configタグ -->
  <login-config>
   <!-- 認証方法 -->
   <auth-method>BASIC</auth-method>
   <realm-name>Members Only</realm-name>
  </login-config>
  <!-- 3)security-roleタグ -->
  <security-role>
    <!-- このWebアプリで利用するロール -->
    <role-name>user</role-name>
  </security-role> 

2. server.xml
<!--      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>-->
          <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
           driverName="com.mysql.jdbc.Driver"
           connectionURL="jdbc:mysql://localhost/aliishop"
           connectionName="root" connectionPassword="1028"
           digest="MD5"
           userTable="member" userNameCol="mail"
           userCredCol="password"
           userRoleTable="roles" roleNameCol="role" />

以上つのファイルを変更しました。

catalog.jspの中身は、
<logic:present name="login">
    <bean:write name="login" property="name" />さん、ようこそ。買い物を楽しんでください
</logic:present>

<logic:notPresent name="login">
    ゲストさん、ようこそ。<html:link action="/members/Login" >ここから</html:link>ログインしてください。
</logic:notPresent>

3章は、まずカタログを表示している状態でログイン・ログアウトボタンがついています。初期状態は、
 ゲストさん、ようこそ。ここからログインしてください。 
と表示され、ログインすると、BASIC認証をしないで、
 ??“?さん、ようこそ。買い物を楽しんでください 
に加えログインボタンが消えて表示されます。
あとログアウトを押してもログアウトしていないような気がします。
 ??“?さん、ようこそ。買い物を楽しんでください 
??“?さんと再度表示されているので。。

簡単な記述がわかっていないのかもしれないのですが、
どうか宜しくお願い致します。

9

回答

5676

閲覧

9件の回答

評価

0

今確認していたのですが、サンプル2-3章も、何故かBASIC認証画面が出てこなくなっていました。

評価

0

ログアウトをすると、下記エラーが表示されます。

[ServletException in:/WEB-INF/view/catalog.jsp] null' 

どうぞ宜しくお願い致します。

評価

0

クライアントが何か分からんけど、ブラウザのBasic認証クライアントにログアウト
はないよ。

評価

0

有難うございます。
ログアウトがないんですね。
ログイン認証できないのはログインし続けているからではないのですね。
Windows7 FireFox使っています。

評価

0

「ログアウトがない」から「ログインし続けてるからではない」を導いたプロセス
はなんだろう。

評価

0

$さん有難うございます。

JavaのBASIC認証にログアウトがないということは、理解できました。
「ログアウトがない」から「ログインし続けているからではない」と思ったのではないです。、
答えが違うのですが、ログアウトしてもログインし続けていると思えたのは、再度ログインをクリックすると認証画面も表示されずに「??“?さん、ようこそ。買い物を楽しんでください 」と表示されるからです。

評価

0

>ログアウトしてもログインし続けていると思えた
認証はサービスが司っているのだから、サービスに「ログアウトします」と伝えな
ければサービスには分からない(厳密にはものによるが)。
「ログアウトしても」と書いているが、一体どんなアクションを取ったんだろう?
ログアウトする手段はないのでログアウトできるはずがないんだけど。

認証されていない状態に戻す方法は、大抵はブラウザを終了させることだけ。

評価

0

有難うございます。解決できました。

ログアウト(リンク)を押すと、
<logic:notPresent name="login">
    ゲストさん、ようこそ。<html:link action="/members/Login" >ここから</html:link>ログインしてください。
</logic:notPresent>
が実行されているみたいです。

でも、再度ログイン(リンク)を押しても、??“?さんと認証ができているようなメッセージが表示されてしまいます。??“?さんとはいっていてるものの結局ログイン認証画面のないいい加減な認証になってしまっていると思い込んでいたのですが、ブラウザを閉じて、IEで
 http://localhost/3/Catalog.do
を入力して押してみたら、BASIC認証画面が出てきました。
FireFoxは、タブだけを閉じていたので、再度ログインしようと思ってもログインが済んでいる状態だから認証画面が出てこなかったようです。

$さん大変お世話になりました。

評価

0

つまり、その本はその部分を検証しないままに掲載しているということだろう。
そういう本を参考にするのは構わないにしても、信頼してはいけない。

元の記事がブラウザ前提でなかったり、BASIC認証でなかったりなら、話は別だ
が。

IEもFirefoxも設定でタブ間の共有の有効無効を切り替えられた気もするけど、原因
は分かったのだしそれはまあいいか。

関係ないけど信者は「Fox」と書かれるといらいらするらしい。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。