トップ «前の日記(2004-10-10) 最新 次の日記(2004-10-12)» 編集

無稽筆談

過去の日記


2004-10-11 はれ

LEO-NETの認証について

かつてLEO-NETの認証を行う、ごく簡単なプログラムのソースを公開したことがある。その後、ときどき「LEO-NET 認証」といったキーワード検索経由で前述のページに来る人がいるようで、意外に需要があるのかなぁと思ったりする。しかしながらあそこに書いたプログラムはあまりユーザフレンドリではない(^^;。そこで気持ちだけ修正。

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.JOptionPane;
import org.apache.commons.codec.binary.Base64;

public class LeonetAuth {
private static final String DEFAULT_PAGE = "http://www.google.co.jp/";

public static void main(String[] args) throws Exception {
if (args.length < 1) {
JOptionPane.showMessageDialog
(null, "usage: java LeonetAuth id:password [URL]",
"起動エラー", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}

String encpass = new String(Base64.encodeBase64(args[0].getBytes()));
URL url = new URL((args.length < 2) ? DEFAULT_PAGE : args[1]);

while (true) {
String message = "";

try {
HttpURLConnection con
= (HttpURLConnection) url.openConnection();
con.setRequestProperty("Authorization", "Basic " + encpass);
con.connect();
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
break;
} else {
message = con.getResponseCode() + " "
+ con.getResponseMessage();
}
} catch (Exception e) {
message = e.toString();
}

int reply = JOptionPane.showConfirmDialog
(null,
"認証に失敗しました。\n" + message + "\n"
+ "再試行しますか?",
"認証エラー",
JOptionPane.WARNING_MESSAGE,
JOptionPane.YES_NO_OPTION);

if (reply == JOptionPane.YES_OPTION) {
continue;
} else {
break;
}
}

System.exit(0);
}
}

変更点は以下の通り。

  • 認証が失敗したとき、確認ダイアログを出して再試行できるようにした。
  • ユーザID、パスワードをコマンドライン引数から与えるようにした。
  • 確認用のURLもコマンドライン引数から与えられるようにした。

これに伴い起動の形式が変わっている。

java LeonetAuth id:password [URL]

idとpasswordはLEO-NETの認証に使うもので、コロンで区切って指定する。URLは認証時に要求するURLで、省略するとhttp://www.google.co.jp/を使用する。

うーん、これだけの記述でどれだけの人がプログラムを実行できるのか甚だ疑問だが(^^;、そのあたりも機会があれば補足したい。

メディアタイプ

先月の終わりにApacheのバージョンアップをしたのだが、mime.typesの設定を忘れていた。そのせいでXHTMLのメディアタイプがapplication/xhtml+xmlとなっていた。いや、実は本来こうあるべきなのだが、困ったことにInternet Explorerはこのメディアタイプを適切に処理しない。やむを得ずmime.typesの設定を変更してtext/htmlを返すようにしていたのだが、バージョンアップ作業の中でそれが元に戻ってしまったというわけだ。Internet Explorerをお使いの方はしばらく一部のページが表示できなかったのではなかろうか。おそらく今は見えるようになっているはずである。

本日のツッコミ(全11件) [ツッコミを入れる]
> HIRATSUKA (2005-04-02 10:22)

平塚といいます。<br>いろいろ勉強になります。<br>また。秘密のアッコちゃん<br>期待しています。<br>クッキーを使ったときはどうなるんでしょうか。

> ひがし (2005-04-02 15:39)

クッキーはHttpURLConnection#setRequestPropertyでCookieフィールドを設定すれば良いと思います...、ってそういう話ではない? (^^; セッション情報を管理するためのクッキーだと、以前のレスポンスで得たSet-Cookieフィールドの情報を持ち回ることになりますので、ここにあるようなURL#openConnectionを使うやり方だと煩雑ですね。Jakarta CommonsのHttpClient(http://jakarta.apache.org/commons/httpclient/)あたりを使うのが現実的ではないでしょうか。

> TrackBack (2005-08-14 17:58)

http://www.nonkida.net/diary/20050814.html#p01<br>無稽筆談<br>LEO-NET認証<br>これまでJavaで書いたプログラムを使っていたのだが、ふと思い立ってRuby版を作ってみた。ワシはこれをWindows端末で実行するので、プログラムも思い切りWindowsに依存している(^^;。異常時のメッセージをダイアログボックスに表示するのに、Windows Scriptを呼び出すよう..

> ウサギ (2006-04-17 22:23)

初めまして<br><br>本当に助かりました。<br><br>Base64のところですが、sun.misc.BASE64Encoderを使ってもいいですよ。<br><br>また、もしLinuxのOSでLeo-Netに接続したい場合、どうすればいいでしょうか?

> ひがし (2006-04-17 23:12)

はじめまして。sun.misc.BASE64Encoderは知らなかったです(^^ゞ。見た感じJavaMailのjavax.mail.internet.MimeUtilityと同じような使い方みたいですね。この程度の固定の文字列のエンコードだと、インターフェイスがStreamよりもStringの方が楽なので、まぁ横着なコーディングということで...(^^;。<br>LEO-NETの認証はHTTPの基本認証が通ればいいので、Linuxでもやり方はいくつもあろうかと思います。Javaの実行環境があればここで書いたやり方が使えますし、LinuxならJavaでなくてもHTTPが叩ける処理系は、Perl・Python・Rubyなどいくつもあるわけで。http://www.nonkida.net/diary/20050819.html#p02にWindowsで使うRubyのプログラムを書いたけど、GUIの部分を端折ればLinuxでも動く、と思うよ(^^;。

> ウサギ (2006-04-23 11:46)

ひがしさん:<br><br>ありがとうございました。Ubuntuをインストールしました、LEO-NETのインタネットを使うのは全然問題ないです。<br><br>もちろん、ひがしさんのJavaプログラムも使えます。<br><br>ありがとうございました。

> ひがし (2006-04-23 15:17)

Ubuntuですか。私もDebian系のディストリビューションを使ってみたいなとは思っているのですが、一度失敗してそれっきりです(^^;。<br>最近はネイティブコードでないといけない場面も少なくなっていますし、OSの違いはそれほど重要な問題ではないんでしょうね。いい時代になったものです(^-^)。

> ふか (2008-08-07 08:24)

はじめまして。<br>レオパレスに住んでいて、最近WindowsXPからubuntuに変えたんですが、認証画面が出なくなってインターネットに接続できません。<br>linuxの知識もネットの知識もほとんどないので、どうすれば解決できるのか見当もつかないのですが、知恵をお貸しいただけませんか?

> ひがし (2008-08-07 22:25)

まずはネットワークの設定を確認するところからだと思います。ubuntuだと[システム]-[システム管理]-[ネットワークの管理]になるのかな。コマンドが実行できるなら<br>$ cat /etc/network/interfaces<br>を実行してみて、DHCPが有効になっているかどうかが最初の一歩かな。

> ふか (2008-08-09 08:09)

助言ありがとうございます。助かりました。<br>いろいろやっているうちに、DNSサーバーが登録されていないことに気付き、無事接続することができました。<br>追加質問で申し訳ないのですが、ubuntuにはDNSサーバーを自動的に探してくれる設定はないのでしょうか?<br>もし分かれば教えていただけませんか。

> ひがし (2008-08-09 23:53)

DNSサーバの情報を伝えるのもDHCPサーバの仕事のはずで、そこが設定されないのはLEO-NET側の問題のような気も...。ふつうはクライアント側でとくにDNSサーバの定義は必要ないと思います。