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.filter; 017 018 import org.opengion.fukurou.util.Closer; 019 import org.opengion.fukurou.util.HybsDateUtil; 020 021 import javax.servlet.ServletRequest; 022 import javax.servlet.http.HttpServletRequest; 023 import javax.servlet.ServletResponse; 024 import javax.servlet.ServletException; 025 import javax.servlet.ServletContext; 026 import javax.servlet.Filter; 027 import javax.servlet.FilterChain; 028 import javax.servlet.FilterConfig; 029 030 // import java.util.Date; 031 // import java.util.Locale ; 032 // import java.text.DateFormat; 033 // import java.text.SimpleDateFormat; 034 035 import java.io.File; // 5.7.3.2 (2014/02/28) Tomcat8 対å¿? 036 import java.io.PrintWriter; 037 import java.io.BufferedReader; 038 import java.io.IOException; 039 import java.io.FileInputStream; 040 import java.io.InputStreamReader; 041 import java.io.UnsupportedEncodingException; 042 043 /** 044 * AccessStopFilter ã¯ã€Filter インターフェースを継承ã—㟠アクセス制御クラスã§ã™ã? 045 * web.xml ã§ filter è¨å®šã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€Webアプリケーションã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制御ã§ãã¾ã™ã? 046 * ã¾ãŸã?SYSTEM ユーザーã¯ã€ã“ã®ãƒ•ィルターを常ã«é€šéŽã—ã¾ã™ã? 047 * 048 * フィルターã«å¯¾ã—ã¦web.xml ã§ãƒ‘ラメータをè¨å®šã—ã¾ã™ã? 049 * ・startTime:åœæ¢é–‹å§‹æ™‚刻 050 * ・stopTime :åœæ¢çµ‚äº?™‚刻 051 * ・filename :åœæ¢æ™‚メãƒ?‚»ãƒ¼ã‚¸è¡¨ç¤ºãƒ•ァイルå? 052 * 053 * ã€WEB-INF/web.xmlã€? 054 * <filter> 055 * <filter-name>AccessStopFilter</filter-name> 056 * <filter-class>org.opengion.hayabusa.filter.AccessStopFilter</filter-class> 057 * <init-param> 058 * <param-name>startTime</param-name> 059 * <param-value>070000</param-value> 060 * </init-param> 061 * <init-param> 062 * <param-name>stopTime</param-name> 063 * <param-value>070000</param-value> 064 * </init-param> 065 * <init-param> 066 * <param-name>filename</param-name> 067 * <param-value>jsp/custom/stopFile.html</param-value> 068 * </init-param> 069 * </filter> 070 * 071 * <filter-mapping> 072 * <filter-name>AccessStopFilter</filter-name> 073 * <url-pattern>/jsp/*</url-pattern> 074 * </filter-mapping> 075 * 076 * @og.group フィルター処ç? 077 * 078 * @version 4.0 079 * @author Kazuhiko Hasegawa 080 * @since JDK5.0, 081 */ 082 public final class AccessStopFilter implements Filter { 083 084 private static boolean stopFilter = false; 085 private String startTime = "230000"; // åœæ¢é–‹å§‹æ™‚刻 086 private String stopTime = "070000"; // åœæ¢çµ‚äº?™‚刻 087 private String filename = null; // åœæ¢æ™‚メãƒ?‚»ãƒ¼ã‚¸è¡¨ç¤ºãƒ•ァイルå? 088 private int startStop = 0; 089 090 /** 091 * フィルター処ç?œ¬ä½“ã?メソãƒ?ƒ‰ã§ã™ã? 092 * 093 * @og.rev 3.1.3.0 (2003/04/10) UTF-8 æ±ºã‚æ‰“ã¡ã§ã€stopFile.html ã‚’è¿”é?ã™ã‚‹ã€? 094 * @og.rev 3.1.8.0 (2003/05/16) æ–?—エンコードãŒã€UTF-8 ã«ãªã£ã¦ã?ªã??ã‚’ä¿®æ£ã€? 095 * 096 * @param request ServletRequestオブジェクãƒ? 097 * @param response ServletResponseオブジェクãƒ? 098 * @param chain FilterChainオブジェクãƒ? 099 * @throws IOException 入出力エラーãŒç™ºç”Ÿã—ãŸå?åˆã?throw ã•れã¾ã™ã? 100 * @throws ServletException サーブレãƒ?ƒˆé–¢ä¿‚ã?エラーãŒç™ºç”Ÿã—ãŸå?åˆã?throw ã•れã¾ã™ã? 101 */ 102 public void doFilter( final ServletRequest request, 103 final ServletResponse response, 104 final FilterChain chain) 105 throws IOException, ServletException { 106 107 if( isStop( request ) ) { 108 BufferedReader in = null ; 109 try { 110 response.setContentType( "text/html; charset=UTF-8" ); 111 PrintWriter out = response.getWriter(); 112 in = new BufferedReader( new InputStreamReader( 113 new FileInputStream( filename ) ,"UTF-8" ) ); 114 String str ; 115 while( (str = in.readLine()) != null ) { 116 out.println( str ); 117 } 118 out.flush(); 119 } 120 catch( UnsupportedEncodingException ex ) { 121 String errMsg = "æŒ?®šã•れãŸã‚¨ãƒ³ã‚³ãƒ¼ãƒ?‚£ãƒ³ã‚°ãŒã‚µãƒã?トã•れã¦ã?¾ã›ã‚“ã€?UTF-8]" ; 122 throw new RuntimeException( errMsg,ex ); 123 } 124 catch( IOException ex ) { 125 String errMsg = "ストリーãƒ?Œã‚ªãƒ¼ãƒ—ン出æ¥ã¾ã›ã‚“ã§ã—ãŸã€?" + filename + "]" ; 126 throw new RuntimeException( errMsg,ex ); 127 } 128 finally { 129 Closer.ioClose( in ); 130 } 131 return; 132 } 133 134 chain.doFilter(request, response); 135 } 136 137 /** 138 * フィルターã®åˆæœŸå‡¦ç?ƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 139 * 140 * フィルターã«å¯¾ã—ã¦web.xml ã§åˆæœŸãƒ‘ラメータをè¨å®šã—ã¾ã™ã? 141 * ・startTime:åœæ¢é–‹å§‹æ™‚刻 142 * ・stopTime :åœæ¢çµ‚äº?™‚刻 143 * ・filename :åœæ¢æ™‚メãƒ?‚»ãƒ¼ã‚¸è¡¨ç¤ºãƒ•ァイルå? 144 * 145 * @og.rev 5.7.3.2 (2014/02/28) Tomcat8 対応ã?getRealPath( "/" ) ã®äº’æ›æ€§ã®ãŸã‚ã®ä¿®æ£ã€? 146 * 147 * @param filterConfig FilterConfigオブジェクãƒ? 148 */ 149 public void init(final FilterConfig filterConfig) { 150 151 ServletContext context = filterConfig.getServletContext(); 152 // String realPath = context.getRealPath( "/" ); 153 String realPath = context.getRealPath( "" ) + File.separator; // 5.7.3.2 (2014/02/28) Tomcat8 対å¿? 154 155 startTime = filterConfig.getInitParameter("startTime"); 156 stopTime = filterConfig.getInitParameter("stopTime"); 157 filename = realPath + filterConfig.getInitParameter("filename"); 158 159 if( startTime == null || stopTime == null ) { 160 startStop = 0; 161 } 162 else { 163 startStop = startTime.compareTo( stopTime ); 164 } 165 } 166 167 /** 168 * フィルターã®çµ‚äº??ç?ƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 169 * 170 */ 171 public void destroy() { 172 // ã“ã“ã§ã¯å‡¦ç?‚’行ã„ã¾ã›ã‚“ã€? 173 } 174 175 /** 176 * フィルターã®å†?ƒ¨çŠ¶æ…‹ã‚’ãƒã‚§ãƒ?‚¯ã™ã‚‹ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 177 * å†?ƒ¨ã®ãƒ•ラグをもã¨ã«ã€åœæ¢/許å¯ã‚’求ã‚ã¾ã™ã? 178 * 179 * @og.rev 3.1.8.0 (2003/05/16) 開始時刻ã¨çµ‚äº?™‚刻をåŒä¸?«ã—ã¦ã?‚‹ã¨ã€ç”»é¢ã‹ã‚‰ã®åˆ¶å¾¡ãŒåйã‹ãªã?ƒã‚°ã‚’ä¿®æ£ã€? 180 * @og.rev 5.5.3.2 (2012/06/08) 通éŽã•ã›ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã€admin を追åŠ?—ã¾ã™ã? 181 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ£ã—ã¾ã™ã? 182 * 183 * @param request ServletRequestオブジェクãƒ? 184 * 185 * @return (true:åœæ¢ false:実行許å¯) 186 */ 187 private boolean isStop( final ServletRequest request ) { 188 String userID = ((HttpServletRequest)request).getRemoteUser() ; 189 // 5.5.3.2 (2012/06/08) 通éŽã•ã›ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã€admin を追åŠ? 190 // if( "SYSTEM".equalsIgnoreCase( userID ) ) { 191 if( "SYSTEM".equalsIgnoreCase( userID ) || "admin".equalsIgnoreCase( userID ) ) { 192 return false; 193 } 194 195 // 4.0.0 (2005/01/31) 196 // DateFormat formatter = new SimpleDateFormat( "HHmmss",Locale.JAPAN ); 197 // String time = formatter.format( new Date() ); 198 String time = HybsDateUtil.getDate( "HHmmss" ); // 5.5.7.2 (2012/10/09) HybsDateUtil を利用 199 200 boolean rtnFlag = stopFilter; 201 if( startStop < 0 ) { 202 if( startTime.compareTo( time ) < 0 && 203 time.compareTo( stopTime ) < 0 ) { 204 rtnFlag = true; 205 } 206 } 207 else if( startStop > 0 ) { 208 if( startTime.compareTo( time ) < 0 || 209 time.compareTo( stopTime ) < 0 ) { 210 rtnFlag = true; 211 } 212 } 213 return rtnFlag; 214 } 215 216 /** 217 * フィルターã®å¼·åˆ¶åœæ¢/解除をè¨å®šã™ã‚‹ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 218 * 219 * @og.rev 4.0.0.0 (2005/01/31) synchronized ã®å»?¢ 220 * 221 * @param flag (true:åœæ¢ false:実行許å¯) 222 */ 223 public static void setStopFilter( final boolean flag ) { 224 stopFilter = flag; 225 } 226 227 /** 228 * フィルターã®å†?ƒ¨çжæ…?å¼·åˆ¶åœæ¢/解除)ã‚’å–å¾—ã™ã‚‹ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 229 * ã“れã¯ã€ç¾åœ¨ã€ã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™ãŒã©ã?ªã£ã¦ã?‚‹ã‹ã¨ã?†çŠ¶æ…‹ã§ã¯ãªãã? 230 * å¼·åˆ¶åœæ¢ã•れã¦ã?‚‹ã‹ã©ã?‹ã®ç¢ºèªãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 231 * 232 * @og.rev 4.0.0.0 (2007/11/29) getStopFilter() â‡?isStopFilter() ã«å¤‰æ›´ 233 * 234 * @return (true:åœæ¢ false:実行許å¯) 235 */ 236 // public static boolean getStopFilter() { 237 public static boolean isStopFilter() { 238 return stopFilter; 239 } 240 241 /** 242 * å†?ƒ¨çŠ¶æ…‹ã‚’æ–?—å?ã§è¿”ã—ã¾ã™ã? 243 * 244 * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?—å?表示 245 */ 246 @Override 247 public String toString() { 248 StringBuilder sb = new StringBuilder(); 249 sb.append( "AccessStopFilter" ); 250 sb.append( "[" ).append( startTime ).append( "],"); 251 sb.append( "[" ).append( stopTime ).append( "],"); 252 sb.append( "[" ).append( filename ).append( "],"); 253 return (sb.toString()); 254 } 255 }