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 }