001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.hayabusa.resource; 017 018 import org.opengion.hayabusa.common.HybsSystem ; 019 import org.opengion.fukurou.util.StringUtil ; 020 import org.opengion.fukurou.util.ApplicationInfo; 021 import org.opengion.fukurou.db.DBUtil; 022 import org.opengion.fukurou.security.HybsCryptography; 023 024 /** 025 * ??URLをラン?キー化したり、そのキーより実URLへ転送したりします? 026 * 027 * 通常のURLは、引数にキーとバリュー値をセ?して??連結します?そ?ままでは 028 * URLが長くなったり、引数の?を書き換えたりできてしま?す? 029 * こ?クラスでは、GE17(URL転送テーブル)に引数付きURLを登録するとともに? 030 * ラン?キーを作?します? 031 * また?こ?ラン?キーを?にGE17を検索し???URLに転送する機?があります? 032 * 033 * @og.rev 4.0.0.0 (2004/12/31) 新規作? 034 * @og.group リソース管? 035 * 036 * @version 4.0 037 * @author Kazuhiko Hasegawa 038 * @since JDK5.0, 039 */ 040 public final class URLXfer { 041 042 // URL転送テーブル(GE17)に??タを書き込?め?SQLです? 043 private static final String INSERT_SQL = "INSERT INTO GE17 (SYSTEM_ID,RANDOM_KEY,NAME_JA,DYVALID,REDIRECT_URL," 044 + "FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD) " 045 + " VALUES ( ?,?,?,?,?,'1',?,?,?,?,'URLXfer' )" ; 046 047 // URL転送テーブル(GE17)から??タを読み込?め?SQLです? 048 private static final String SELECT_SQL = "SELECT REDIRECT_URL FROM GE17" 049 + " WHERE SYSTEM_ID = ? AND RANDOM_KEY = ? AND DYVALID >= ?" ; 050 051 private final String DBID ; // ???転送テーブルアクセスの接続? 052 private final String ADDRESS ; // ???転送テーブルアクセスアドレス 053 private final String SYSTEM_ID ; // シス?ID 054 055 /** コネクションにアプリケーション??を追記するかど???*/ 056 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 057 058 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 059 private final ApplicationInfo appInfo; 060 061 /** 062 * コンストラクター 063 * 064 * アドレスが存在しな??合?、?期化メソ?を呼び出します? 065 * 066 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 067 */ 068 public URLXfer() { 069 DBID = HybsSystem.sys( "RESOURCE_DBID" ); 070 ADDRESS = StringUtil.nval( 071 HybsSystem.sys( "RESOURCE_ADDRESS" ) , 072 HybsSystem.sys( "CONTEXT_URL" ) + "jsp/index.jsp" 073 ) + "?XFER="; 074 075 SYSTEM_ID = HybsSystem.sys( "SYSTEM_ID" ); 076 077 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 078 if( USE_DB_APPLICATION_INFO ) { 079 appInfo = new ApplicationInfo(); 080 // ユーザーID,IPアドレス,ホスト名 081 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 082 // 画面ID,操?プログラ?D 083 appInfo.setModuleInfo( "URLXfer",null,null ); 084 } 085 else { 086 appInfo = null; 087 } 088 } 089 090 /** 091 * URL??の??タを?に、URLXferオブジェクトを構築します? 092 * ??タをGE17(URL転送テーブル)に登録するとともに、ラン?キーを作?(XFER)して? 093 * そ?ラン?引数を用?アドレスを返します? 094 * アドレスは、シス?パラメータ URL_XFER_ADDRESS + "?XFER=" + ラン?キーです? 095 * 096 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 097 * @og.rev 5.2.2.0 (2010/11/01) util.StringUtil から security.HybsCryptography へ移? 098 * 099 * @param redirectURL 転送URL 100 * @param name 表示名称 101 * @param validDate 有効日?yyyyMMdd) 102 * @param userid ユーザーID 103 * 104 * @return RandomURL?? 105 */ 106 public String getRandomURL( final String redirectURL,final String name,final String validDate,final String userid ) { 107 108 String DYSET = HybsSystem.getDate( "yyyyMMddHHmmss" ); 109 String key = redirectURL + Math.random() ; 110 // String randomKey = StringUtil.getMD5( key ); 111 String randomKey = HybsCryptography.getMD5( key ); // 5.2.2.0 (2010/11/01) クラス変更 112 113 String validYMD = ( validDate != null ) ? validDate : "99999999" ; 114 115 String[] args = new String[] { SYSTEM_ID,randomKey,name,validYMD,redirectURL,DYSET,DYSET,userid,userid }; 116 DBUtil.dbExecute( INSERT_SQL,args,appInfo,DBID ); 117 118 return ADDRESS + randomKey ; 119 } 120 121 /** 122 * ラン?キー(XFER)の??より、?のURLを検索します? 123 * ??タはラン?キーを?に、GE17(URL転送テーブル)より取り出します? 124 * 取り出す条件は、SYSTEM_ID 、RANDOM_KEY と DYVALID ?現在時刻より大きい場合です? 125 * 126 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 127 * 128 * @param randomKey ハッシュ化されたキー?? 129 * 130 * @return RedirectURL?? 131 */ 132 public String getRedirectURL( final String randomKey ) { 133 String nowDate = HybsSystem.getDate( "yyyyMMdd" ); 134 135 String[] args = new String[] { SYSTEM_ID,randomKey,nowDate }; 136 String[][] vals = DBUtil.dbExecute( SELECT_SQL,args,appInfo,DBID ); 137 138 if( vals != null && vals.length > 0 && vals[0] != null && vals[0].length > 0 ) { 139 return vals[0][0]; 140 } 141 return null; 142 } 143 144 /** 145 * オブジェクト?識別子として?詳細なユーザー??を返します? 146 * 147 * @return 詳細なユーザー?? 148 */ 149 @Override 150 public String toString() { 151 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 152 rtn.append( "DBID :" ).append( DBID ); 153 rtn.append( " ADDRESS :" ).append( ADDRESS ); 154 rtn.append( " SYSTEM_ID :" ).append( SYSTEM_ID ); 155 return rtn.toString(); 156 } 157 }