Basic認証について – プログラミング – Home

通知
すべてクリア

Basic認証について


アルウェン
 アルウェン
(@アルウェン)
ゲスト
結合: 22年前
投稿: 1
Topic starter  

Servletで行うBasic認証について教えてください。
とあるHPにて下記サンプルソースを入手しました。
これをコンパイルしてTomcat(3.2.1)にて実行した
ところ、「req.getHeader(Authorization);」が
Nullで返ってきていて、ユーザとパスワードを聞いてくる
ダイアログが表示されません。
出てくるのはNullだった場合の「You must enter password.」です。

環境は
Apache 1.3.27
Tomcat 3.2.1
です。
なんらかの設定が足りないためにダイアログが出てこない
ものと思われます。ご教授お願いします。m(__)m
ちなみに、Apache側で設定するBasic認証は出来ます。

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Authentication extends HttpServlet {
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}

public void destroy() {
super.destroy();
}

public String getServletInfo() {
return Authentication;
}

public void service(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
super.service(req,res);
}

public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
res.setContentType(text/html);
PrintWriter out = res.getWriter();
String auth = req.getHeader(Authorization);
out.println(<HTML><HEAD><TITLE>);
out.println(Authorization);
out.println(</TITLE></HEAD><BODY><H1>);
out.println(Authorization);
out.println(</H1>);
if( auth == null ) {
res.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
out.println(<P>You must enter password.</P>);
}
else {
String realm = auth.substring(auth.lastIndexOf(' ')
+1);
byte b[] = realm.getBytes();
int l = b.length;
ByteArrayOutputStream bout = Base64.decode(new
ByteArrayInputStream(b),l);
if( bout != null ) {
String dec = bout.toString();
String name = dec.substring(0,dec.indexOf
(':'));
String password = dec.substring(dec.indexOf
(':')+1);
out.println(<P>OK. You are
authorized.</P>);
out.println(<P>Name = +name+,Password
= +password+.</P>);
}
else {
res.setStatus
(HttpServletResponse.SC_UNAUTHORIZED);
out.println(<P>Failed to parse
authorization header.</P>);
}
}
out.println(</BODY></HTML>);
out.close();
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
super.doPost(req,res);
}
public long getLastModified(HttpServletRequest req) {
return super.getLastModified(req);
}
}


引用解決済
トピックタグ
kusa
 kusa
(@kusa)
ゲスト
結合: 22年前
投稿: 18
 

ベーシック認証ですが、これはApachの機能です。

1.ベーシック認証が掛からない場合
  この場合は、Apachの設定ファイルを見直して見る
  必要があります。
  http.confの中に認証設定として
<Location /servlet/*>
  Options None
  AllowOverride AuthConfig
  AuthUserFile /etc/httpd/conf/.htpasswd
  AuthName test05Auth
  AuthType Basic
  require valid-user
</Location>
を加える必要があります。
http://www.remus.dti.ne.jp/~hori-/java/apach-conf.htm

2.ベーシック認証は掛かるけど意図的にServletからダイアログを出す。
  APIにダイアログを出すメソッドがあったけど
  手元に資料が無いからまた今度


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました