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.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019
020 import static org.opengion.fukurou.util.StringUtil.nval ;
021
022 /**
023 * æŒ?®šされた value 値の{@XXXX} 変数が設定された場合ã?み表示するタグですã?
024 *
025 * value 値に、{@XXXX} 変数を使用して、リクエストå?が設定された場合ã?み
026 * そã?値を表示しますã?これは、{@XXXX} 変数と固定å?をçµ?�¿合わせた場合でã‚?
027 * 同様に、å?が設定されてã�?�ªã�??合ã?、使用されませんã€?
028 * defaultVal が設定されており、リクエストå?が設定されてã�?�ªã�??合ã?defaultVal 値ã�?
029 * 使用されますã?
030 * こã?タグが使用されるケースの代表は、SQLでの order by 句ですã?ä¸?ˆ¬のリクエスト時にはã€?
031 * order by 句をリクエストで設定して、ユーザーが検索する時に、å?り替えができるように
032 * しますã?別画面から、リンク等で画面を呼び出すå?合ã?ã€??常 order by 句の条件までã€?
033 * æŒ?®šしません。そのような場合に備えて、og:appear タグでdefaultVal 値を設定しておきã€?
034 * 未æŒ?®š時の検索é ?‚’予めæŒ?®šしておきますã?
035 *
036 * @og.formSample
037 * ●形式ï¼?lt;og:appear startKey="[order by|…]" value="…" defaultVal="[…]" />
038 * ●body?šなã�?
039 *
040 * ●Tag定義
041 * <og:appear
042 * startKey 【TAG】開始文字å?を設定しまã�?初期値:"")
043 * value ○ã?TAG】å?をセãƒ?ƒˆしまã�?æŒ?®šされた値ã�?設定されてã�?‚‹場合ã?み使用されまã�?(å¿??)
044 * defaultVal 【TAG】å?期å?を設定しまã�?value値がNULLの場合に、この初期値が表示)
045 * quotCheck 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_SQL_INJECTION_CHECK[=true])
046 * xssCheck 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_XSS_CHECK[=true])
047 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
048 * />
049 *
050 * ●使用ä¾?
051 * <!-- DB検索 SQLæ–?¨˜述 debug="true" でSQLæ–?‚’確認できますã?-->
052 * <og:query command="{@command}" debug="{@debug}" maxRowCount="{@maxRowCount}">
053 * select CLM,NAME_JA,LABEL_NAME,URL,KBSAKU,
054 * SYSTEM_ID,LANG,FGJ,(CASE WHEN URL IS NULL THEN 0 ELSE 1 END) AS ONMARK
055 * from GF41
056 * <!-- 検索条件でWhereTagを使用すれば{@xxxx}がNULLの場合ã?そã?条件は無視されますã? -->
057 * <og:where>
058 * <og:and value = "FGJ in ('0','1')" />
059 * <og:and value = "SYSTEM_ID = '{@SYSTEM_ID}'" />
060 * <og:and value = "LANG = '{@LANG}'" />
061 * <og:and value = "CLM like '{@CLM}%'" />
062 * <og:and value = "NAME_JA like '{@NAME_JA}%'" />
063 * <og:and value = "LABEL_NAME like '{@LABEL_NAME}%'" />
064 * <og:and value = "KBSAKU = '{@KBSAKU}'" />
065 * </og:where>
066 * <!-- ORDER BY句でAppearTagを使用すれば{@ORDER_BY}がNULLの場合ã?ORDER BY句は無視されますã? -->
067 * <!-- またã?{@ORDER_BY}がNULLの場合に、defaultVal属æ?を指定すれã?、その値でORDER BY表示されますã? -->
068 * <og:appear startKey = "order by" value = "{@ORDER_BY}"
069 * defaultVal = "SYSTEM_ID,CLM,LANG" />
070 * </og:query>
071 *
072 * @og.group 画面部å“?
073 *
074 * @version 4.0
075 * @author Kazuhiko Hasegawa
076 * @since JDK5.0,
077 */
078 public class AppearTag extends CommonTagSupport {
079 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
080 private static final String VERSION = "5.7.8.1 (2014/07/18)" ;
081
082 private static final long serialVersionUID = 578120140718L ;
083
084 private String startKey = "";
085 private String value = null;
086 private String defaultVal = null;
087 private boolean quotCheck = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" ); // 5.7.8.1 (2014/07/18)
088 private boolean xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.7.8.1 (2014/07/18)
089
090 /**
091 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
092 *
093 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
094 * @og.rev 5.7.8.1 (2014/07/18) quotCheck,xssCheck 追åŠ?
095 *
096 * @return 後続å?ç�??æŒ?¤º(EVAL_PAGE)
097 */
098 @Override
099 public int doEndTag() {
100 debugPrint(); // 4.0.0 (2005/02/28)
101
102 // 5.7.8.1 (2014/07/18) quotCheck,xssCheck 追åŠ?
103 useQuotCheck( quotCheck );
104 useXssCheck( xssCheck );
105
106 String output = getRequestParameter( value );
107 if( isNull() ) {
108 output = defaultVal;
109 }
110
111 if( output != null ) {
112 jspPrint( startKey + " " + output );
113 }
114
115 return EVAL_PAGE ;
116 }
117
118 /**
119 * タグリブオブジェクトをリリースしますã?
120 *
121 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
122 *
123 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
124 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
125 * @og.rev 5.7.8.1 (2014/07/18) quotCheck , xssCheck 追åŠ?
126 *
127 */
128 @Override
129 protected void release2() {
130 super.release2();
131 startKey = "";
132 value = null;
133 defaultVal = null;
134 quotCheck = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" ); // 5.7.8.1 (2014/07/18)
135 xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.7.8.1 (2014/07/18)
136 }
137
138 /**
139 * 【TAG】開始文字å?を設定しまã�?初期値:"")ã€?
140 *
141 * @og.tag
142 * こã?キーは、バリューと接続される場合に空白æ–?—をä¸?�¤挿入しますã?
143 *
144 * @param val 開始文字å?(例:startKey="order by")
145 */
146 public void setStartKey( final String val ) {
147 startKey = nval( getRequestParameter( val ),startKey );
148 }
149
150 /**
151 * 【TAG】å?をセãƒ?ƒˆしまã�?æŒ?®šされた値ã�?設定されてã�?‚‹場合ã?み使用されまã�?ã€?
152 *
153 * @og.tag
154 * æŒ?®šされた値ã�?設定されてã�?‚‹場合ã?みã€?–‹始文字å?(startKey)とçµ?�¿合わせれて、使用されますã?
155 * これは、ä¸?ˆ¬にvalue値が変動する場合に、defaultVal 等に重è¤?�™るå?ã‚?
156 * 設定したくなã�??合に使用しますã?{@XXXX}æ–?—が使用できますã?
157 *
158 * @param val 値
159 */
160 public void setValue( final String val ) {
161 value = val;
162 }
163
164 /**
165 * 【TAG】å?期å?を設定しまã�?value値がNULLの場合に、この初期値が表示)ã€?
166 *
167 * @og.tag
168 * value値がNULL(æŒ?®šされなã�?の場合に、この初期値がå?として使用されますã?
169 *
170 * @param val 初期値
171 */
172 public void setDefaultVal( final String val ) {
173 defaultVal = nval( getRequestParameter( val ),defaultVal );
174 }
175
176 /**
177 * 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
178 * (初期値:USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
179 *
180 * @og.tag
181 * ?³?±?¬インジェクション対策ã?ä¸?�¤として、暫定的ではありますが、SQLのパラメータに
182 * 渡す文字å?にクォーãƒ?‚£ション(') を許さなã�?¨定にすれば、ある程度は防止できますã?
183 * 数字タイプã?引数にはã€?or 5=5 などのクォーãƒ?‚£ションを使用しなã�?‚³ードを埋めてもã?
184 * 数字チェãƒ?‚¯で検å?可能ですã?æ–?—タイプã?場合ã?、å¿?�š (')をã?ずしてã€?
185 * ' or 'A' like 'A のような形式になる為ã€?')チェãƒ?‚¯ã�?�‘でも有効ですã?
186 * (') が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
187 * (初期値:シスãƒ?ƒ 定数のUSE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
188 *
189 * @og.rev 4.0.0.0 (2005/08/31) 新規追åŠ?
190 *
191 * @param flag クォーãƒ?‚£ションチェãƒ?‚¯ [true:する/それ以å¤?しない]
192 * @see org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK
193 */
194 public void setQuotCheck( final String flag ) {
195 quotCheck = nval( getRequestParameter( flag ),quotCheck );
196 }
197
198 /**
199 * 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
200 * (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
201 *
202 * @og.tag
203 * クロスサイトスクリプティング(XSS)対策ã?ä¸?’°としてless/greater than signにつã�?�¦のチェãƒ?‚¯を行いますã?
204 * (><) が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
205 * (初期値:シスãƒ?ƒ 定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
206 *
207 * @og.rev 5.0.0.2 (2009/09/15) 新規追åŠ?
208 *
209 * @param flag XSSチェãƒ?‚¯ [true:する/false:しない]
210 * @see org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK
211 */
212 public void setXssCheck( final String flag ) {
213 xssCheck = nval( getRequestParameter( flag ),xssCheck );
214 }
215
216 /**
217 * こã?オブジェクトã?æ–?—å?表現を返しますã?
218 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
219 *
220 * @return こã?クラスのæ–?—å?表現
221 */
222 @Override
223 public String toString() {
224 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
225 .println( "VERSION" ,VERSION )
226 .println( "startKey" ,startKey )
227 .println( "value" ,value )
228 .println( "defaultVal" ,defaultVal )
229 .println( "Other..." ,getAttributes().getAttribute() )
230 .fixForm().toString() ;
231 }
232 }