FC2ブログ

まったり開発日誌

embossの工具箱(J2EE Java2 Linux Zaurus C++)

開発メモ-Java

  1. スポンサーサイト(--/--)
  2. Excel関数メモ(10/15)
  3. 【Struts】*.do設定で、struts-config.xmlに設定していないアドレスにアクセスがあった場合、エラーページへ飛ばす。(08/16)
  4. セッション管理方式(08/02)
  5. Web開発するときに気になること(08/02)
  6. WebLogicのメモリ量をいじる(08/02)
次のページ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Excel関数メモ

メモメモ。 一般的なテーブルカラム名からjava用の名称を作成する =LOWER(MID(A1,1,1)) & MID(SUBSTITUTE(PROPER(A1),"_",""),2,100) 以上。
スポンサーサイト
  1. 2008/10/15(水) 10:36:11|
  2. 開発メモ-Java
  3. | トラックバック:0
  4. | コメント:0

【Struts】*.do設定で、struts-config.xmlに設定していないアドレスにアクセスがあった場合、エラーページへ飛ばす。

web.xmlに
    <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
    </servlet-mapping>


のように*.doを設定していると、
javax.servlet.ServletException: アクション /hogeAction に対応するマッピングが見つかりません
というエラーが出ることがあります。

これはstruts-config.xml に "/hogeAction" というパスを持つアクションが存在しないために発生するエラーです。

これを、対応するアクションが存在しない場合にはエラーページへ飛ばすように設定したい。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10418&forum=12&3
上記URLを参考にRequestProcessorを継承して実装してみました。

まず、存在しないアクションを指定した場合にデフォルトで移動するパスを保持するに
defaultPathというプロパティを追加する為、ControllerConfig を継承したクラスを作ります。

public class MyControllerConfig extends ControllerConfig {
/* 存在しないdoを開いた時にデフォルトで開くパスを指定する */
private String defaultPath;

    public String getDefaultPath() {
        return defaultPath;
    }

    public void setDefaultPath(String defaultPath) {
        this.defaultPath = defaultPath;
    }

}


RequestProcessor#init(ActionServlet,ModuleConfig)をオーバーライドして、初期化コードを実装します。
また、指定されたアクションが
存在しない場合、エラーを表示している部分はprocessMappingのようでうすので、これを拡張し、指定されたアクションが無ければ、プロパティで指定したアクションへ移動するようにコードを追加します。今回はTilesを使用したいのでTilesRequestProcessorを拡張します。

public class MyTilesRequestProcessor extends TilesRequestProcessor {
    private String defaultPath = null;
    @Override
    public void init(ActionServlet servlet, ModuleConfig moduleConfig) throws ServletException {
        super.init(servlet, moduleConfig);

        ControllerConfig cc = moduleConfig.getControllerConfig();

        if (cc instanceof MyControllerConfig) {
            MyControllerConfig icc = (MyControllerConfig) cc;
            defaultPath = icc.getDefaultPath();
        }

    }
    protected ActionMapping processMapping(HttpServletRequest request, HttpServletResponse response, String path)
            throws IOException {

        // Is there a mapping for this path?
        ActionMapping mapping = (ActionMapping) moduleConfig.findActionConfig(path);

        // If a mapping is found, put it in the request and return it
        if (mapping != null) {
            request.setAttribute(Globals.MAPPING_KEY, mapping);
            return (mapping);
        }

        // Locate the mapping for unknown paths (if any)
        ActionConfig configs[] = moduleConfig.findActionConfigs();
        for (int i = 0; i < configs.length; i++) {
            if (configs[i].getUnknown()) {
                mapping = (ActionMapping) configs[i];
                request.setAttribute(Globals.MAPPING_KEY, mapping);
                return (mapping);
            }
        }

        /* 追加ロジックここから */
        // Is there a mapping for default path?
        mapping = (ActionMapping) moduleConfig.findActionConfig(this.defaultPath);
        if (mapping != null) {
            request.setAttribute(Globals.MAPPING_KEY, mapping);
            return (mapping);
        }       
        /* 追加ロジックここまで */
      
        // No mapping can be found to process this request
        String msg = getInternal().getMessage("processInvalid", path);
        log.error(msg);
        response.sendError(HttpServletResponse.SC_NOT_FOUND, msg);

        return null;
    }

}

struts-config.xmlの設定は次のようにしました。

<controller processorClass="com.hoge.MyTilesRequestProcessor" 
className="com.hoge.MyControllerConfig">
<set-property property="defaultPath" value="/notFoundAction" />
</controller>


でもぉ、こんなことをしなくても unknown="true"にすれば万事解決。
以上


  1. 2007/08/16(木) 17:40:12|
  2. 開発メモ-Java
  3. | トラックバック:0
  4. | コメント:0

セッション管理方式

□考慮すべき点
・セキュアモードCookieの利用
weblogic.xml デプロイメント記述子の、cookie-secureをtrueに設定する。
クッキーを HTTPS 接続でのみ返信するようブラウザに指示する。これにより、クッキー ID が保護され、HTTPS を使用する Web サイトでのみ使用されるようになる。この機能を有効にすると、HTTP でのセッション クッキーは機能しなくなる。

・セッションIDをGETメソッドで送らない
セッションIDをGETで送信するとURLの一部にセッションIDが埋め込まれる為セッションIDが漏洩する危険性がある。
Weblogicではデフォルトではクッキー無効ブラウザでは自動的にセッションIDがURLにエンコードされる。weblogic.xmlデプロイメント記述子のurl-rewriting-enabledをfalseにすることで、クッキーが無効なブラウザで、セッション ID が URL にエンコーディングされる動作をOffにする。

・セッションに格納するオブジェクト
セッションには最低限の情報を保持する。また保持した情報の鮮度にも気をつける。
セッションに保持する情報は必ず必要最低限にとどめる事。セッション内で非常にサイズの大きいオブジェクトを作成するような設計は出来るだけしない。
今後の拡張を考慮し、念のためセッションデータはシリアライズ可能にしておく。
セッション オブジェクトの属性を変更するには非推奨となった putValue に代わって HttpSession.setAttribute を使用する。
同様に、セッション オブジェクトから属性を削除するには、非推奨となった removeValue に代わって removeAttribute を使用する。
  1. 2007/08/02(木) 10:49:33|
  2. 開発メモ-Java
  3. | トラックバック:0
  4. | コメント:0

Web開発するときに気になること

入力値の妥当性チェック
 サーバで必ず行う
 クライアントでの入力値チェックはユーザビリティの向上させる必要がある場合に実施する。
HTML出力時には特殊記号をエスケープ処理する(クロスサイトスクリプティングを防ぐ為にサニタイジング)
 Strutsのbeen:write または JSTLのc:out を使用すること。このタグはHTMLの特殊記号( < > , " ' & )を変換する機能を持つ。
SQL出力時にはバインドメカニズムを利用してSQLインジェクションを防ぐ
 プレースホルダとして「?」記号を使用しSQL文をあらかじめコンパイルしておくこと。
外部コマンド呼び出し時の妥当性チェック
http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole02.html
ファイル名指定時の妥当性チェック
 任意の場所にファイルをアップロードされる事がないように、ファイル名に使用される記号をサニタイジングする。
できれば通信は全てSSLで保護する。
セキュアモードCookieの利用 WebLogicの設定の場合、
 weblogic.xml デプロイメント記述子の、
 cookie-secureをtrueに設定する。
 クッキーを HTTPS 接続でのみ返信するようブラウザに指示する。これにより、クッキー ID が保護され、HTTPS を使用する Web サイトでのみ使用されるようになる。この機能を有効にすると、HTTP でのセッション クッキーは機能しなくなる。
安全なセッションIDの使用
 セッションID用のcookieの生成・維持はWebLogicサーバによって自動的に行われます。
アクセス権限のチェック
 チェックしましょう。
セッションタイムアウトの設定
 セッションは一定時間が過ぎると切断されるように設定する。長期(例えば1日以上)のセッション保持は行わない。
Cookieの有効ドメイン範囲制限
 Cookieの有効度メイン範囲は必ず限定しCookieの漏洩を防ぐ。
Cookieのハードディスクへの保存禁止。有効期限を指定しない事
 Weblogicではデフォルトでユーザがブラウザを終了すると期限が切れるようにクッキーが設定されているので問題ありません。
認証後に、新たなセッションIDを発行する事。ログインページではセッションIDを発行しない
セッションIDをGETメソッドで送らない
 CookieによるセッションIDの管理を行う。
脆弱なパスワードの拒否
ログイン、リトライ可能回数の制限
 本案件ではユーザ名、パスワードでのログインは行わない。
平文パスワード保存の禁止
 DBに保存するパスワードはハッシュ化しましょう。
秘密情報は画面へ表示しない
 秘密情報は画面へ表示しない事。表示しなければならない場合、マスクして表示するなどの対策を行う。
本番環境にソースファイルやバックアップファイルなど不要なファイルを置かない。
 アタックの足がかりになることがあります。
管理機能へのアクセス制限、原則、インターネット経由でのアクセスを禁止する
Webアプリケーションアセスメントの実施
 「セキュリティアセスメントサービス」等を受けるようにする。
Webシステムペネストレーションテストの実施
 コンピュータやネットワークのセキュリティ上の弱点を発見するテスト手法の一つで、システムを実際に攻撃して侵入を試みる手法。実際にWebサーバへアクセスしアタックを行いセキュリティホールが存在しないか確認する。
  1. 2007/08/02(木) 10:44:59|
  2. 開発メモ-Java
  3. | トラックバック:0
  4. | コメント:3

WebLogicのメモリ量をいじる

C:\bea\weblogic92\samples\domains\workshop\init-info\startscript.xml

            <!--<value>-Xms256m -Xmx512m</value>-->
            <value>-Xms256m -Xmx256m</value>

上記ファイル色々いぢるが反映されずーダメです。

たぶん「startscript.xml」の設定に基づき、
setDomainEnv.cmd や startWebLogic.cmd
が作られているようです。でもどうやって作るのかわからないので
手っ取り早くsetDomainEnvを直接以下のように変更した。

C:\bea\weblogic92\samples\domains\workshop\bin\setDomainEnv.cmd

とりあえず半分の値にしてみた。今のところこれで動作している(動作不安定になるようであればメモリ増やしてみるのも手)
mxとmsを一致させるとパフォーマンスがあがるかも(メモリサイズが固定され動的確保の時間がなくなるはず?)

@REM set MEM_ARGS=-Xms256m -Xmx512m
set MEM_ARGS=-Xms128m -Xmx256m

ポイントベースも邪魔なのでfalseにする。本来起動オプションで制御出来るっぱいバッチになっているが解析すんのも面倒なんで直接falseにしてまえば問題解決

@REM set POINTBASE_FLAG=true
set POINTBASE_FLAG=false

上記設定でとりあえずWeblogicのメモリ使用量が半分以下になった。
  1. 2007/08/02(木) 10:36:39|
  2. 開発メモ-Java
  3. | トラックバック:0
  4. | コメント:0
次のページ

RSSフィード

カレンダー

08 | 2018/09 | 10
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -

カテゴリー

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

リンク

このブログをリンクに追加する

メールフォーム

名前:
メール:
件名:
本文:

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