Sakura VPS 上でJersey Client API を使った、
JSONを取得して、加工、受け渡しするようなRESTful APIを作成していたときに
文字化けが発生しました。
すべてUTF-8で統一されているのになぜ?とあせりました。
Java内部の問題なのかとも思いましたが、開発環境のUbuntuでは
発生してなかったので、ない。
受信周りの問題だなといろいろ調べた結果、
結局はロケールの設定の問題でした。
開発環境のUbuntuでは、
$ locale
の結果が、
$ locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
のようになっているのに対してCentOSは、
$ locale
LANG=C
LC_CTYPE="C"
…
C…、よくわからない値が入っていました。
なので、localeを編集 して、再起動しました。
$ vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
結果、JSON取得時の文字化けはなくなりました。
Jerseyは賢い子
2011年12月15日木曜日
2011年12月8日木曜日
[ASP]maxrequestlengthのエラー処理
ASPの場合、ファイルのアップロードの制限をしたいという時は、web.configでmaxrequestlengthを設定しますが、そのままだとmaxrequestlengthを超えた場合に”ページを表示できません”画面が表示されてしまいます。そのままだと、どういったエラーが出ているのかユーザに通知できないのでサポートも面倒くさいです。そこで、カスタムエラーを設定すればいいのかと思っていたら、ちょっと違うようです。
詳しくは、
http://www.developer.com/db/article.php/10920_3426051_2
にありますが、どうも日本語では見つからなかったので覚書です。
詳しくは、
http://www.developer.com/db/article.php/10920_3426051_2
にありますが、どうも日本語では見つからなかったので覚書です。
Sub Application_Error(ByVal sender As Object, _
ByVal e As EventArgs)
' Fires when an error occurs
' Check to see whether we came
' from the upload form
If Path.GetFileName(Request.Path) = _
"UploadForm.aspx" Then
' Get the error details
Dim appException As System.Exception = _
Server.GetLastError()
Dim checkException As HttpException = _
CType(appException, HttpException)
' Verify the expected error
If checkException.GetHttpCode = 400 And _
checkException.ErrorCode = -2147467259 Then
' Error 400 = bad request, user
' tried to upload a file that's too large
Session("ImageTooLarge") = True
Server.ClearError()
' Go to the original target page
Response.Redirect("UploadForm.aspx")
End If
End If
' For other errors, just accept the default processing
End Sub
MavenのJDKバージョン設定
激しく構成が乱れてるけど、とりあえず公開しておきます。
そのうち直します。
Mavenでコンパイルエラーが発生しました。
注釈は -source 1.3 でサポートされていません
(注釈を使用可能にするには、-source 5 以降を使用してください)
@Override
MavenのデフォルトでJDK1.3を使用しているために発生しているようです。
JDK1.3だと注釈、型指定のリスト、Foreach等が使えず割と不便。
JDKを変更するためにはpom.xmlのpluginに次の項を追加します。
そのうち直します。
Mavenでコンパイルエラーが発生しました。
注釈は -source 1.3 でサポートされていません
(注釈を使用可能にするには、-source 5 以降を使用してください)
@Override
MavenのデフォルトでJDK1.3を使用しているために発生しているようです。
JDK1.3だと注釈、型指定のリスト、Foreach等が使えず割と不便。
JDKを変更するためにはpom.xmlのpluginに次の項を追加します。
<build>
<properties> <java.version>1.6</java.version> </properties>
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin>
参考 https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
サーバのブルートフォース攻撃対策
気づいたら結構な頻度でブルートフォース攻撃されているようなので
次のようなiptablesの設定を追加しました。
次のようなiptablesの設定を追加しました。
$ sudo /sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set $ sudo /sbin/iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
22ポートにコネクションが60秒に4回アクセスされると60秒アクセスを停止する。
次のような結果が出たら成功。
$ sudo /sbin/iptables --listtarget prot opt source destination DROP tcp -- anywhere anywhere tcp dpt:ssh state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source tcp -- anywhere anywhere tcp dpt:ssh state NEW recent: SET name: DEFAULT side: source
認証は128bitキーのみにしてるから気休めですが。
このあたりが詳しそう
iptables の ipt_recent で ssh の brute force attack 対策
2011年10月27日木曜日
maven: jetty plugin ssl オレオレ証明書 の設定
jetty plugin 8.x での設定
1.keystore の作成
JDKのkeytoolでkeystoreを作成する。
作成されたkeystoreを任意の場所へ
2.pom.xmlの編集
下記のようにpom.xmlにJetty pluginの設定を編集。
jetty-maven-pluginの"<connectors>"にSslSocketConnectorを追加する。
3.パスワードの暗号化
pom.xmlにパスワードを平文で保存するのは良くないので、
暗号化する。
を実行すると、(pass)->jetty6の場合
というような値が取得できるので、OBFまたはMD5をpom.xmlに入力する。
ついでに、iPhone等の開発でオレオレ証明書を利用する場合は、
NSURLRequestなら次のようなimplementの追加
ASIHttpRequestならvalidatesSecureCertificate = NOでOK
1.keystore の作成
JDKのkeytoolでkeystoreを作成する。
keytool -keystore keystore -alias jetty -genkey -keyalg RSA -storepass (pass) -keypass (pass) -dname "CN=(domain)"
作成されたkeystoreを任意の場所へ
2.pom.xmlの編集
下記のようにpom.xmlにJetty pluginの設定を編集。
jetty-maven-pluginの"<connectors>"にSslSocketConnectorを追加する。
<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector"> <port>8443</port> <maxIdleTime>60000</maxIdleTime> <keystore>(任意のkeystoreへのパス)</keystore> <password>(pass)</password> <keyPassword>(pass)</keyPassword> </connector>
3.パスワードの暗号化
pom.xmlにパスワードを平文で保存するのは良くないので、
暗号化する。
java -cp jetty-http-8.x.jar:jetty-util-8.x.jar org.eclipse.jetty.http.security.Password (pass)
を実行すると、(pass)->jetty6の場合
jetty6 OBF:1ktv1x0r1z0f1z0f1x1v1kqz MD5:e032a01e5c4dbb03a29fb031f6b37658
というような値が取得できるので、OBFまたはMD5をpom.xmlに入力する。
ついでに、iPhone等の開発でオレオレ証明書を利用する場合は、
NSURLRequestなら次のようなimplementの追加
@implementation NSURLRequest(NSHTTPURLRequest) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; // Or whatever logic } @end
ASIHttpRequestならvalidatesSecureCertificate = NOでOK
2011年9月8日木曜日
Ubuntu vmdkのマウント
書きかけでずっと放置してた投稿なので情報が古いかも。
VMware player, serverの仮想ディスクのvmdkの中身を見るためだけに
いちいちVMware playerを実行するのも面倒です。
そんなときにはvmdkをマウントしてくれるvmware-mountが便利です。
VMware playerには付属していないので、
VMware serverをダウンロードしなおして利用します。
VMware server の Linux版だと、tar.gzのbinフォルダ以下にあるvmware-mountを
任意の場所に保存します。
vmware-mountを使用する。
1.マウントするvmdk上のパーティションを検索する。
vmware-mount -p (vmdkファイル)
例) 次のように表示される。
Nr Start Size Type Id Sytem
-- ---------- ---------- ---- -- ------------------------
1 63 268430022 BIOS 7 HPFS/NTFS
2.パーティションを指定してマウントする。
sudo vmware-mount (vmdkファイル) 1 (マウント先フォルダ)
1.の例の場合、パーティション 1を指定する。
例) sudo vmware-mount vmimage.vmdk 1 /mnt/vmdk
3.パーティションをアンマウントする。
sudo vmware-mount -x
VMware player, serverの仮想ディスクのvmdkの中身を見るためだけに
いちいちVMware playerを実行するのも面倒です。
そんなときにはvmdkをマウントしてくれるvmware-mountが便利です。
VMware playerには付属していないので、
VMware serverをダウンロードしなおして利用します。
VMware server の Linux版だと、tar.gzのbinフォルダ以下にあるvmware-mountを
任意の場所に保存します。
vmware-mountを使用する。
1.マウントするvmdk上のパーティションを検索する。
vmware-mount -p (vmdkファイル)
例) 次のように表示される。
Nr Start Size Type Id Sytem
-- ---------- ---------- ---- -- ------------------------
1 63 268430022 BIOS 7 HPFS/NTFS
2.パーティションを指定してマウントする。
sudo vmware-mount (vmdkファイル) 1 (マウント先フォルダ)
1.の例の場合、パーティション 1を指定する。
例) sudo vmware-mount vmimage.vmdk 1 /mnt/vmdk
3.パーティションをアンマウントする。
sudo vmware-mount -x
maven on eclipse : m2e
mavenをeclipseで使用する方法。(9/8現在)
基本的には下記リンクを参照する。
基本的には下記リンクを参照する。
http://d.hatena.ne.jp/Kishi/20090228/1235813480
で、私がやってみてつまずいたところを上げてみる。
2. m2eclipseのインストール のリンクが切れてるので下記リンクに変更する。
http://download.eclipse.org/technology/m2e/releases
6. jettyをサーバとして起動
「ゴール」の「選択」 画面に遷移しても「ゴール」の候補が出てきません。
Mavenレポジトリを読み込んでいないさいのバグのようです。(参照)
Mavenレポジトリビュー(Window->Show View->Other->Mavenカラ追加)から
右クリックで、「Full Index Enabled」を選択し「Rebuild Index」を実行します。
10分ぐらいかかる。
下のタスクトレイに表示される進捗はずっと0%ですが実際は進捗してます。(バグ?)
Rebuild後は「ゴール 」の選択候補が表示されるようになります。
2011年5月7日土曜日
ubuntu上でwindows2000,XP@Vmware playerの音声を出す
調べても日本語の記事が見当たらなかったのでメモ
このあたり参考に、
http://ubuntuforums.org/showthread.php?t=182304&highlight=vmware+sound
まずは、alsa-ossをインストール:
音声のありの VMPlayer bin(vmplayer-alsa) の作成:
上記ファイルの内容は次のようにする:
で、ファイルに実行権限を付与:
これで、vmplayer-alsaから実行すれば音声がでます。
以下の環境で確認、
vmplayer-3.1.3
ホストOS:Ubuntu 10.10
ゲストOS:Windows2000
このあたり参考に、
http://ubuntuforums.org/showthread.php?t=182304&highlight=vmware+sound
まずは、alsa-ossをインストール:
sudo apt-get install alsa-oss
音声のありの VMPlayer bin(vmplayer-alsa) の作成:
sudo vi /usr/bin/vmplayer-alsa
#!/bin/bash LD_PRELOAD=libaoss.so exec /usr/bin/vmplayer "$@"
sudo chmod +x /usr/bin/vmplayer-alsa
これで、vmplayer-alsaから実行すれば音声がでます。
以下の環境で確認、
vmplayer-3.1.3
ホストOS:Ubuntu 10.10
ゲストOS:Windows2000
登録:
投稿 (Atom)