スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[CentOS5.3] Tomcat5.5+HTTPSまとめ

CentOS5.3&Tomcat5.5でHTTPS(TSL)を使う方法。
案の定、また手古摺ったのでメモしておく。。。

①CentOSのGNOME端末で以下を実行
// tomcat5.confのJAVA_HOMEのパスを確認し、/binに移動
// ※僕の環境ではJAVA_HOME="/usr/lib/jvm/java"でした。

[root@localhost ~]# cd /usr/lib/jvm/java/jre/bin/

// keytoolの存在を確認
[root@localhost bin]# dir
java orbd policytool rmiregistry tnameserv
keytool pack200 rmid servertool unpack200

// キーストアを作成。
// -genkey・・・キーの生成を指示
// -v・・・詳細情報の出力
// -keyalg・・・キーのアルゴリズム(RSA)
// -alias・・・生成したキーや署名情報が登録される項目名
// -keystore・・・キーストアファイルの名前
// -dname・・・サーバーの識別名(「cn=xxxxx」等)
// -keypass・・・秘密キーのパスワード
// -storepass・・・キーストアファイルのパスワード
// -validity・・・証明書の有効期限(日数)

[root@localhost bin]# keytool -genkey -alias tomcat -keyalg RSA -keystore my.keystore
キーストアのパスワードを入力してください: // Tomcatデフォルトの場合は「changeit」と入力
新規パスワードを再入力してください:
姓名を入力してください。
[Unknown]: ※適当に
組織単位名を入力してください。
[Unknown]: ※適当に
組織名を入力してください。
[Unknown]: ※適当に
都市名または地域名を入力してください。
[Unknown]: ※適当に
州名または地方名を入力してください。
[Unknown]: ※適当に
この単位に該当する 2 文字の国番号を入力してください。
[Unknown]: ja
CN=※適当に, OU=※適当に, O=※適当に, L=※適当に, ST=※適当に, C=ja でよろしいですか?
[no]: yes

<tomcat>の鍵パスワードを入力してください。
(キーストアのパスワードと同じ場合は RETURN を押してください): // エンター下押

// カレントに移動
[root@localhost bin]# cd /

// 生成したキーストアを検索
[root@localhost /]# find -name my.keystore -print
./usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/bin/my.keystore

②Tomcat5.5のserver.xmlを修正。
 該当箇所のコメントアウトを外し、①で確認したキーストアのファイルパスと
 パスワード(changeitじゃない場合)を追記する。
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
keystoreFile="/usr/lib/jvm/java/jre/bin/my.keystore"
keystorePass="※changeitの場合はこの行自体が不要"

clientAuth="false" sslProtocol="TLS" />

③Tomcat再起動
[root@localhost /]# service tomcat5 restart
Stopping tomcat5: [ OK ]
Starting tomcat5: [ OK ]

https://localhost:8443でTom猫さんが表示されればおk。
スポンサーサイト

[Java] JSONICがスゴく使える件

前の記事でもちょこっと使ってたんですが、今回はAndroidアプリを作ってる途上で使ってみました。
JSONICについての詳細はコチラを参照。

まず、通常の使い方。
encodeメソッドでPOJO⇒JSON、decodeメソッドでJSON⇒POJOにしてくれる。超便利ー(´ω`)

final class MyItem
{
// フィールド
private String Artist = "初音ミク";
private String Title = "Vocalogenesis";
private String[] Tracks =
new String[]{"右肩の蝶", "初音ミクの暴走", "いろは唄", "パラジクロロベンゼン"};

// ゲッターとセッター
public String getArtist() { return Artist; }
public void setArtist(String artist) { Artist = artist; }
public String getTitle() { return Title; }
public void setTitle(String title) { Title = title; }
public String[] getTracks() { return Tracks; }
public void setTracks(String[] tracks) { Tracks = tracks; }
}
// POJO⇒JSON
String json = JSON.encode(new MyItem());
System.out.println(json);
// ↓
// {"artist":"初音ミク","title":"Vocalogenesis","tracks":["右肩の蝶","初音ミクの暴走","いろは唄","パラジクロロベンゼン"]}

// JSON⇒POJO
MyItem myItem = JSON.decode(json, MyItem.class);
System.out.println(myItem.Artist);

だがJSONICの真価はこんなものではない。XML⇒JSONはモチロンの事、
なんとRPCやRESTでJSONを送信するWebサービスをサーブレットで簡単に作れてしまう。
ちなみにRESTでJSONを返すサンプルプロジェクトの構成はこんな感じ。
jsonic01.png
■JsonTestService.java

package com.taepon;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonTestService
{
public Object find(Map params)
{
// http://localhost:8080/JSONServlet/JsonTest.json?value=AAA
// にアクセスすると、params(Map)には
// {"class":"JsonTest","value":"AAA"} が入ってくる

String className = (String)params.get("class"); // 必ず入る
String value = (String)params.get("value");

Map map = new HashMap();
map.put("class", className);
map.put("value", value);

List> list = new ArrayList>();
list.add(map);

return list;
}
}

■web.xml




restServlet
net.arnx.jsonic.web.RESTServlet

config

{
"debug": true,
"mappings": {
"/{class}.json": "com.taepon.${class}Service"
}
}





restServlet
*.json



一番重要なのがこのweb.xmlの設定で、
まずservlet-classをnet.arnx.jsonic.web.RESTServletにする点。

あと、param-valueのmappingの設定。
"/{class}.json": "com.taepon.${class}Service"だと、
http://~/サーブレット名/JsonTest.jsonとリクエストされた場合に、
com.taepon.JsonTestServiceクラスのfindメソッドが呼ばれるようになっている。
他にもパッケージをURLに指定する方法もあるので、詳しくは冒頭のJSONICのリンクを参照。

テスト用のコードはこんな感じで(・ω・)

URL url = new URL("http://localhost:8080/JSONServlet/JsonTest.json?value=AAA");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setInstanceFollowRedirects(false);
conn.connect();

// Headers
Map> headers = conn.getHeaderFields();
for (String key : headers.keySet())
{
List values = headers.get(key);

for (String value : values)
{
System.out.println("Head:" + key + ": " + value);
}
}

// ResponseCode
System.out.println("Code:" + conn.getResponseCode());
System.out.println("Mesg:" + conn.getResponseMessage());

// Body
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while (true)
{
if (line == null) break;

String line = reader.readLine();
System.out.println(line);
}

Pagination

Utility

プロフィール

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。