• R/O
  • SSH
  • HTTPS

sso-proxy: Commit


Commit MetaInfo

Revision7 (tree)
Zeit2008-06-27 22:36:52
Autorshinsuke

Log Message

added error handling.

Ändern Zusammenfassung

Diff

--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/access/impl/AccessManagerImpl.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/access/impl/AccessManagerImpl.java (revision 7)
@@ -284,26 +284,27 @@
284284
285285 HttpClient httpclient = getHttpClient();
286286
287- String cookieMapName = SSOProxyConstraints.STORED_COOKIE_LIST
287+ String cookieListName = SSOProxyConstraints.STORED_COOKIE_LIST
288288 + hostConfig.getName();
289289
290290 HttpSession httpSession = request.getSession();
291- setCookiesToServer(httpSession, cookieMapName, httpclient);
291+ setCookiesToServer(httpSession, cookieListName, httpclient);
292292
293- HttpMethod httpMethod = authConfig.buildLoginHttpMethod(request);
293+ HttpMethod httpMethod = null;
294+ try {
295+ httpMethod = authConfig.buildLoginHttpMethod(request);
294296
295- // build request
296- requestBuilderChain.reset();
297- requestBuilderChain.build(RequestBuilder.LOGIN_PROCESS, request,
298- hostConfig, httpMethod);
297+ // build request
298+ requestBuilderChain.reset();
299+ requestBuilderChain.build(RequestBuilder.LOGIN_PROCESS, request,
300+ hostConfig, httpMethod);
299301
300- try {
301302 // execute method
302303 int result = httpclient.executeMethod(httpMethod);
303304
304305 // update cookies
305306 setCookiesToProxy(httpSession, httpclient.getState().getCookies(),
306- cookieMapName);
307+ cookieListName);
307308
308309 Map<String, Object> resultMap = buildResult(httpMethod.getURI()
309310 .toString(), httpMethod, result);
@@ -313,10 +314,13 @@
313314 } catch (Exception e) {
314315 // } catch (HttpException e) {
315316 // } catch (IOException e) {
316- // TODO message
317- throw new AccessException("TODO.msg", e);
317+ // error
318+ throw new AccessException("000016", new Object[] { hostConfig
319+ .getName() }, e);
318320 } finally {
319- httpMethod.releaseConnection();
321+ if (httpMethod != null) {
322+ httpMethod.releaseConnection();
323+ }
320324 }
321325 }
322326
@@ -332,14 +336,15 @@
332336 HttpSession httpSession = request.getSession();
333337 setCookiesToServer(httpSession, cookieMapName, httpclient);
334338
335- HttpMethod httpMethod = authConfig.buildAuthHttpMethod(request);
339+ HttpMethod httpMethod = null;
340+ try {
341+ httpMethod = authConfig.buildAuthHttpMethod(request);
336342
337- // build request
338- requestBuilderChain.reset();
339- requestBuilderChain.build(RequestBuilder.AUTH_PROCESS, request,
340- hostConfig, httpMethod);
343+ // build request
344+ requestBuilderChain.reset();
345+ requestBuilderChain.build(RequestBuilder.AUTH_PROCESS, request,
346+ hostConfig, httpMethod);
341347
342- try {
343348 // execute method
344349 int result = httpclient.executeMethod(httpMethod);
345350
@@ -354,10 +359,13 @@
354359 } catch (Exception e) {
355360 // } catch (HttpException e) {
356361 // } catch (IOException e) {
357- // TODO message
358- throw new AccessException("TODO.msg", e);
362+ // error
363+ throw new AccessException("000017", new Object[] { hostConfig
364+ .getName() }, e);
359365 } finally {
360- httpMethod.releaseConnection();
366+ if (httpMethod != null) {
367+ httpMethod.releaseConnection();
368+ }
361369 }
362370 }
363371
@@ -399,8 +407,9 @@
399407
400408 Forwarder forwarder = (Forwarder) container.getComponent(forwarderName);
401409 if (forwarder == null) {
402- //TODO
403- throw new AccessException("TODO.msg");
410+ // error
411+ throw new AccessException("000018", new Object[] { forwarderName,
412+ hostConfigName });
404413 }
405414
406415 Map<String, Object> props = new HashMap<String, Object>();
@@ -420,8 +429,9 @@
420429 } catch (Exception e) {
421430 // } catch (SSOProxyException e) {
422431 // } catch (IOException e) {
423- //TODO
424- throw new AccessException("TODO.msg", e);
432+ // error
433+ throw new AccessException("000019", new Object[] { forwarderName,
434+ hostConfigName });
425435 }
426436
427437 }
@@ -443,7 +453,9 @@
443453 .buildProxyUrl(redirectLocation));
444454 } catch (IOException e) {
445455 // redirect failed
446- throw new AccessException("TODO.msg", e);
456+ // error
457+ throw new AccessException("000020",
458+ new Object[] { redirectLocation }, e);
447459 }
448460 } else {
449461 throw new AccessException("TODO.msg");
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/servlet/ProxyServlet.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/servlet/ProxyServlet.java (revision 7)
@@ -3,6 +3,7 @@
33 import java.io.IOException;
44 import java.io.InputStream;
55 import java.io.UnsupportedEncodingException;
6+import java.util.Locale;
67 import java.util.Map;
78
89 import javax.servlet.ServletException;
@@ -11,11 +12,11 @@
1112 import javax.servlet.http.HttpServletResponse;
1213
1314 import jp.sf.ssoproxy.SSOProxyConstraints;
14-import jp.sf.ssoproxy.access.AccessException;
1515 import jp.sf.ssoproxy.access.AccessManager;
1616 import jp.sf.ssoproxy.config.AuthConfig;
1717 import jp.sf.ssoproxy.config.HostConfig;
1818 import jp.sf.ssoproxy.config.ProxyConfig;
19+import jp.sf.ssoproxy.util.ErrorHandlingUtil;
1920
2021 import org.seasar.framework.container.S2Container;
2122 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
@@ -22,22 +23,67 @@
2223
2324 public class ProxyServlet extends HttpServlet {
2425
26+ private static final long serialVersionUID = 778883232389401884L;
27+
2528 private static final String PROXY_CONFIG_COMPONENT = "proxyConfig";
2629
30+ private String errorPage;
31+
32+ private Locale systemLocale;
33+
2734 @Override
35+ public void init() throws ServletException {
36+ // set an error page
37+ errorPage = getServletConfig().getInitParameter(
38+ SSOProxyConstraints.ERROR_JSP_KEY);
39+ if (errorPage == null) {
40+ errorPage = SSOProxyConstraints.DEFAULT_ERROR_JSP;
41+ }
42+ // set a system locale
43+ String value = getServletConfig().getInitParameter(
44+ SSOProxyConstraints.SYSTEM_LOCALE_KEY);
45+ if (value != null) {
46+ try {
47+ String[] values = value.split("_");
48+ if (values.length == 3) {
49+ systemLocale = new Locale(values[0], values[1], values[2]);
50+ } else if (values.length == 2) {
51+ systemLocale = new Locale(values[0], values[1]);
52+ } else if (values.length == 1) {
53+ systemLocale = new Locale(values[0]);
54+ } else {
55+ systemLocale = Locale.ENGLISH;
56+ }
57+ } catch (RuntimeException e) {
58+ systemLocale = Locale.ENGLISH;
59+ }
60+ } else {
61+ systemLocale = Locale.ENGLISH;
62+ }
63+ }
64+
65+ @Override
2866 protected void doGet(HttpServletRequest request,
2967 HttpServletResponse response) throws ServletException, IOException {
30- //TODO check a user name from session
68+ // needs to check a user name from session by filter
3169
3270 String pathInfo = request.getPathInfo();
3371 if (pathInfo == null) {
34- // TODO
72+ // error
73+ String erroCode = "000002";
74+ ErrorHandlingUtil.printLog(erroCode, null, systemLocale);
75+ ErrorHandlingUtil.forwardErrorPage(request, response, erroCode,
76+ null, errorPage);
3577 return;
3678 }
3779
3880 int actualPathPos = pathInfo.indexOf("/", 1);
3981 if (actualPathPos < 0) {
40- //TODO
82+ // error
83+ String erroCode = "000003";
84+ ErrorHandlingUtil.printLog(erroCode, null, systemLocale);
85+ ErrorHandlingUtil.forwardErrorPage(request, response, erroCode,
86+ null, errorPage);
4187 return;
4288 }
4389
@@ -50,7 +96,12 @@
5096 String hostConfigName = pathInfo.substring(1, actualPathPos);
5197 HostConfig hostConfig = proxyConfig.getHostConfig(hostConfigName);
5298 if (hostConfig == null) {
53- //TODO
99+ // error
100+ String erroCode = "000004";
101+ ErrorHandlingUtil.printLog(erroCode,
102+ new Object[] { hostConfigName }, systemLocale);
103+ ErrorHandlingUtil.forwardErrorPage(request, response, erroCode,
104+ new Object[] { hostConfigName }, errorPage);
54105 return;
55106 }
56107
@@ -58,7 +109,14 @@
58109 AccessManager accessManager = (AccessManager) container
59110 .getComponent(hostConfig.getAccessManagerName());
60111 if (accessManager == null) {
61- //TODO
112+ // error
113+ String erroCode = "000005";
114+ ErrorHandlingUtil.printLog(erroCode, new Object[] {
115+ hostConfig.getAccessManagerName(), hostConfigName },
116+ systemLocale);
117+ ErrorHandlingUtil.forwardErrorPage(request, response, erroCode,
118+ new Object[] { hostConfig.getAccessManagerName(),
119+ hostConfigName }, errorPage);
62120 return;
63121 }
64122
@@ -66,18 +124,19 @@
66124 // set request encoding
67125 request.setCharacterEncoding(hostConfig.getEncoding());
68126 } catch (UnsupportedEncodingException e) {
69- //TODO
70- e.printStackTrace();
127+ // error
128+ ErrorHandlingUtil.printLog(e, systemLocale);
129+ ErrorHandlingUtil.forwardErrorPage(request, response, e, errorPage);
71130 return;
72131 }
73132
74133 Map<String, Object> resultMap = null;
75- String url = hostConfig.buildUrl(pathInfo.substring(actualPathPos));
76- // TODO the url has request parameters or not when checking it in a following method...
77- AuthConfig authConfig = hostConfig.getAuthConfig(request.getMethod(),
78- url, request.getParameterMap());
134+ try {
135+ String url = hostConfig.buildUrl(pathInfo.substring(actualPathPos));
136+ // TODO the url has request parameters or not when checking it in a following method...
137+ AuthConfig authConfig = hostConfig.getAuthConfig(request
138+ .getMethod(), url, request.getParameterMap());
79139
80- try {
81140 // check a login page
82141 if (authConfig != null) {
83142 // Check a login page
@@ -122,13 +181,10 @@
122181 .get(SSOProxyConstraints.MIME_TYPE_PARAM)));
123182 // flush
124183 response.flushBuffer();
125- } catch (AccessException e) {
126- //TODO
127- e.printStackTrace();
128- return;
129184 } catch (Exception e) {
130- //TODO
131- e.printStackTrace();
185+ // error
186+ ErrorHandlingUtil.printLog(e, systemLocale);
187+ ErrorHandlingUtil.forwardErrorPage(request, response, e, errorPage);
132188 return;
133189 } finally {
134190 accessManager.release(resultMap);
@@ -137,9 +193,9 @@
137193 }
138194
139195 @Override
140- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
141- throws ServletException, IOException {
142- doGet(req, resp);
196+ protected void doPost(HttpServletRequest request,
197+ HttpServletResponse response) throws ServletException, IOException {
198+ doGet(request, response);
143199 }
144200
145201 private boolean isRedirectStatusCode(int statusCode) {
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/impl/HostConfigImpl.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/impl/HostConfigImpl.java (revision 7)
@@ -4,6 +4,7 @@
44 import java.util.Map;
55
66 import jp.sf.ssoproxy.config.AuthConfig;
7+import jp.sf.ssoproxy.config.ConfigException;
78 import jp.sf.ssoproxy.config.HostConfig;
89
910 public class HostConfigImpl implements HostConfig {
@@ -43,7 +44,7 @@
4344 }
4445
4546 public AuthConfig getAuthConfig(String method, String url,
46- Map<String, String[]> params) {
47+ Map<String, String[]> params) throws ConfigException {
4748 if (authConfigs != null) {
4849 for (int i = 0; i < authConfigs.length; i++) {
4950 if (authConfigs[i].checkLoginPageUrl(method, url, params)) {
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/impl/AbstractAuthConfig.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/impl/AbstractAuthConfig.java (revision 7)
@@ -1,10 +1,8 @@
11 package jp.sf.ssoproxy.config.impl;
22
33 import java.io.BufferedReader;
4-import java.io.IOException;
54 import java.io.InputStream;
65 import java.io.InputStreamReader;
7-import java.io.UnsupportedEncodingException;
86 import java.util.HashMap;
97 import java.util.List;
108 import java.util.Map;
@@ -12,8 +10,8 @@
1210 import javax.servlet.http.HttpServletRequest;
1311
1412 import jp.sf.ssoproxy.SSOProxyConstraints;
15-import jp.sf.ssoproxy.access.AccessException;
1613 import jp.sf.ssoproxy.config.AuthConfig;
14+import jp.sf.ssoproxy.config.ConfigException;
1715 import jp.sf.ssoproxy.util.UrlBuilderUtil;
1816
1917 import org.apache.commons.httpclient.HttpMethod;
@@ -48,7 +46,7 @@
4846 * @see jp.sf.ssoproxy.config.impl.AuthConfig#checkLoginPageUrl(java.lang.String)
4947 */
5048 public boolean checkLoginPageUrl(String method, String url,
51- Map<String, String[]> params) {
49+ Map<String, String[]> params) throws ConfigException {
5250 //TODO method and params
5351 if (url != null && url.equals(loginPageUrl)) {
5452 return true;
@@ -56,7 +54,8 @@
5654 return false;
5755 }
5856
59- public boolean checkLoginPage(InputStream inputStream) {
57+ public boolean checkLoginPage(InputStream inputStream)
58+ throws ConfigException {
6059 try {
6160 BufferedReader reader = new BufferedReader(new InputStreamReader(
6261 inputStream, loginPageEncoding));
@@ -67,12 +66,11 @@
6766 }
6867 line = reader.readLine();
6968 }
70- } catch (UnsupportedEncodingException e) {
71- // TODO Auto-generated catch block
72- e.printStackTrace();
73- } catch (IOException e) {
74- // TODO Auto-generated catch block
75- e.printStackTrace();
69+ // } catch (UnsupportedEncodingException e) {
70+ // } catch (IOException e) {
71+ } catch (Exception e) {
72+ // error
73+ throw new ConfigException("000013", e);
7674 }
7775 return false;
7876 }
@@ -80,7 +78,8 @@
8078 /* (non-Javadoc)
8179 * @see jp.sf.ssoproxy.config.impl.AuthConfig#buildLoginHttpMethod()
8280 */
83- public HttpMethod buildLoginHttpMethod(HttpServletRequest request) throws AccessException{
81+ public HttpMethod buildLoginHttpMethod(HttpServletRequest request)
82+ throws ConfigException {
8483 if (SSOProxyConstraints.POST_METHOD.equals(loginPageMethod)) {
8584 return UrlBuilderUtil.buildPostMethod(loginPageUrl,
8685 getParameterMap(request, SSOProxyConstraints.GET_METHOD,
@@ -92,14 +91,15 @@
9291 getParameterMap(request, SSOProxyConstraints.GET_METHOD,
9392 loginPageDataList), loginPageEncoding);
9493 }
95- //TODO msg
96- throw new IllegalArgumentException();
94+ // error
95+ throw new ConfigException("000014", new Object[] { loginPageUrl });
9796 }
9897
9998 /* (non-Javadoc)
10099 * @see jp.sf.ssoproxy.config.impl.AuthConfig#buildAuthHttpMethod()
101100 */
102- public HttpMethod buildAuthHttpMethod(HttpServletRequest request) throws AccessException{
101+ public HttpMethod buildAuthHttpMethod(HttpServletRequest request)
102+ throws ConfigException {
103103 if (SSOProxyConstraints.POST_METHOD.equals(authPageMethod)) {
104104 return UrlBuilderUtil.buildPostMethod(authPageUrl, getParameterMap(
105105 request, SSOProxyConstraints.GET_METHOD, authPageDataList),
@@ -110,12 +110,13 @@
110110 request, SSOProxyConstraints.GET_METHOD, authPageDataList),
111111 authPageEncoding);
112112 }
113- //TODO msg
114- throw new IllegalArgumentException();
113+ // error
114+ throw new ConfigException("000015", new Object[] { authPageUrl });
115115 }
116116
117117 protected Map<String, String[]> getParameterMap(HttpServletRequest request,
118- String method, List<Map<String, String>> dataList) throws AccessException{
118+ String method, List<Map<String, String>> dataList)
119+ throws ConfigException {
119120 Map<String, String[]> params = new HashMap<String, String[]>();
120121 if (dataList != null) {
121122 for (Map<String, String> entry : dataList) {
@@ -131,7 +132,7 @@
131132 }
132133
133134 protected abstract String getDataValue(HttpServletRequest request,
134- String value) throws AccessException;
135+ String value) throws ConfigException;
135136
136137 public String getAuthPageMethod() {
137138 return authPageMethod;
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/impl/JetspeedAuthConfigImpl.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/impl/JetspeedAuthConfigImpl.java (revision 7)
@@ -5,7 +5,7 @@
55 import javax.servlet.http.HttpServletRequest;
66
77 import jp.sf.ssoproxy.SSOProxyConstraints;
8-import jp.sf.ssoproxy.access.AccessException;
8+import jp.sf.ssoproxy.config.ConfigException;
99 import jp.sf.ssoproxy.util.JetspeedUtil;
1010
1111 import org.apache.jetspeed.security.SecurityException;
@@ -23,14 +23,14 @@
2323
2424 @Override
2525 protected String getDataValue(HttpServletRequest request, String value)
26- throws AccessException {
26+ throws ConfigException {
2727 if (usernameKey.equals(value)) {
2828 // from user attribute
2929 String remoteUser = (String) request.getSession().getAttribute(
3030 SSOProxyConstraints.CURRENT_REMOTE_USER);
3131 if (remoteUser == null) {
32- //TODO
33- throw new IllegalStateException();
32+ // error
33+ throw new ConfigException("000009");
3434 }
3535
3636 try {
@@ -39,8 +39,8 @@
3939 Preferences prefs = user.getUserAttributes();
4040 return prefs.get(usernameAttributeKey, "");
4141 } catch (SecurityException e) {
42- // TODO
43- throw new AccessException("TODO.msg");
42+ // error
43+ throw new ConfigException("000010", new Object[] { remoteUser });
4444 }
4545 } else if (passwordKey.equals(value)) {
4646 // from user attribute
@@ -47,8 +47,8 @@
4747 String remoteUser = (String) request.getSession().getAttribute(
4848 SSOProxyConstraints.CURRENT_REMOTE_USER);
4949 if (remoteUser == null) {
50- //TODO
51- throw new IllegalStateException();
50+ // error
51+ throw new ConfigException("000011");
5252 }
5353
5454 try {
@@ -57,8 +57,8 @@
5757 Preferences prefs = user.getUserAttributes();
5858 return prefs.get(passwordAttributeKey, "");
5959 } catch (SecurityException e) {
60- // TODO
61- throw new AccessException("TODO.msg");
60+ // error
61+ throw new ConfigException("000012", new Object[] { remoteUser });
6262 }
6363 }
6464 return value;
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/HostConfig.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/HostConfig.java (revision 7)
@@ -14,5 +14,5 @@
1414 public abstract String getForwarderName(String mimeType);
1515
1616 public abstract AuthConfig getAuthConfig(String method, String url,
17- Map<String, String[]> params);
17+ Map<String, String[]> params) throws ConfigException;
1818 }
\ No newline at end of file
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/ConfigException.java (nonexistent)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/ConfigException.java (revision 7)
@@ -0,0 +1,41 @@
1+package jp.sf.ssoproxy.config;
2+
3+import jp.sf.ssoproxy.SSOProxyException;
4+
5+public class ConfigException extends SSOProxyException {
6+
7+ private static final long serialVersionUID = 7749580473857490597L;
8+
9+ public ConfigException(String messageId) {
10+ super(messageId);
11+ }
12+
13+ public ConfigException(String messageId, Object[] args) {
14+ super(messageId, args);
15+ }
16+
17+ public ConfigException(String messageId, String message, Throwable cause) {
18+ super(messageId, message, cause);
19+ }
20+
21+ public ConfigException(String messageId, Object[] args, String message,
22+ Throwable cause) {
23+ super(messageId, args, message, cause);
24+ }
25+
26+ public ConfigException(String messageId, String message) {
27+ super(messageId, message);
28+ }
29+
30+ public ConfigException(String messageId, Object[] args, String message) {
31+ super(messageId, args, message);
32+ }
33+
34+ public ConfigException(String messageId, Throwable cause) {
35+ super(messageId, cause);
36+ }
37+
38+ public ConfigException(String messageId, Object[] args, Throwable cause) {
39+ super(messageId, args, cause);
40+ }
41+}
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/AuthConfig.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/config/AuthConfig.java (revision 7)
@@ -5,21 +5,20 @@
55
66 import javax.servlet.http.HttpServletRequest;
77
8-import jp.sf.ssoproxy.access.AccessException;
9-
108 import org.apache.commons.httpclient.HttpMethod;
119
1210 public interface AuthConfig {
1311
1412 public abstract boolean checkLoginPageUrl(String method, String url,
15- Map<String, String[]> params);
13+ Map<String, String[]> params) throws ConfigException;
1614
17- public abstract boolean checkLoginPage(InputStream inputStream);
15+ public abstract boolean checkLoginPage(InputStream inputStream)
16+ throws ConfigException;
1817
1918 public abstract HttpMethod buildLoginHttpMethod(HttpServletRequest request)
20- throws AccessException;
19+ throws ConfigException;
2120
2221 public abstract HttpMethod buildAuthHttpMethod(HttpServletRequest request)
23- throws AccessException;
22+ throws ConfigException;
2423
2524 }
\ No newline at end of file
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/filter/SessionAuthFilter.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/filter/SessionAuthFilter.java (revision 7)
@@ -1,6 +1,7 @@
11 package jp.sf.ssoproxy.filter;
22
33 import java.io.IOException;
4+import java.util.Locale;
45
56 import javax.servlet.Filter;
67 import javax.servlet.FilterChain;
@@ -9,13 +10,43 @@
910 import javax.servlet.ServletRequest;
1011 import javax.servlet.ServletResponse;
1112 import javax.servlet.http.HttpServletRequest;
13+import javax.servlet.http.HttpServletResponse;
1214
1315 import jp.sf.ssoproxy.SSOProxyConstraints;
16+import jp.sf.ssoproxy.util.ErrorHandlingUtil;
1417
1518 public class SessionAuthFilter implements Filter {
19+ private String errorPage;
1620
21+ private Locale systemLocale;
22+
1723 public void init(FilterConfig config) throws ServletException {
18-
24+ // set an error page
25+ errorPage = config.getInitParameter(SSOProxyConstraints.ERROR_JSP_KEY);
26+ if (errorPage == null) {
27+ errorPage = SSOProxyConstraints.DEFAULT_ERROR_JSP;
28+ }
29+ // set a system locale
30+ String value = config
31+ .getInitParameter(SSOProxyConstraints.SYSTEM_LOCALE_KEY);
32+ if (value != null) {
33+ try {
34+ String[] values = value.split("_");
35+ if (values.length == 3) {
36+ systemLocale = new Locale(values[0], values[1], values[2]);
37+ } else if (values.length == 2) {
38+ systemLocale = new Locale(values[0], values[1]);
39+ } else if (values.length == 1) {
40+ systemLocale = new Locale(values[0]);
41+ } else {
42+ systemLocale = Locale.ENGLISH;
43+ }
44+ } catch (RuntimeException e) {
45+ systemLocale = Locale.ENGLISH;
46+ }
47+ } else {
48+ systemLocale = Locale.ENGLISH;
49+ }
1950 }
2051
2152 public void destroy() {
@@ -25,7 +56,8 @@
2556 public void doFilter(ServletRequest request, ServletResponse response,
2657 FilterChain chain) throws IOException, ServletException {
2758
28- if (request instanceof HttpServletRequest) {
59+ if (request instanceof HttpServletRequest
60+ && response instanceof HttpServletResponse) {
2961 HttpServletRequest httpRequest = (HttpServletRequest) request;
3062 String remoteUser = (String) httpRequest.getSession().getAttribute(
3163 SSOProxyConstraints.CURRENT_REMOTE_USER);
@@ -32,11 +64,17 @@
3264 if (remoteUser != null) {
3365 chain.doFilter(request, response);
3466 } else {
35- //TODO redirect?
67+ // error
68+ String erroCode = "000008";
69+ ErrorHandlingUtil.printLog(erroCode, null, systemLocale);
70+ ErrorHandlingUtil.forwardErrorPage(
71+ (HttpServletRequest) request,
72+ (HttpServletResponse) response, erroCode, null,
73+ errorPage);
3674 }
3775 } else {
3876 //TODO redirect?
39-
77+ response.getWriter().write("Not supported.");
4078 }
4179 }
4280
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/forwarder/impl/HtmlForwarder.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/forwarder/impl/HtmlForwarder.java (revision 7)
@@ -1,13 +1,8 @@
11 package jp.sf.ssoproxy.forwarder.impl;
22
3-import java.io.BufferedReader;
4-import java.io.IOException;
53 import java.io.InputStream;
6-import java.io.InputStreamReader;
74 import java.io.OutputStream;
85 import java.io.OutputStreamWriter;
9-import java.io.Reader;
10-import java.io.UnsupportedEncodingException;
116 import java.util.Map;
127
138 import jp.sf.ssoproxy.SSOProxyConstraints;
@@ -16,18 +11,22 @@
1611 import jp.sf.ssoproxy.forwarder.ForwarderException;
1712 import jp.sf.ssoproxy.handler.html.HtmlHandler;
1813
14+import org.apache.commons.logging.Log;
15+import org.apache.commons.logging.LogFactory;
1916 import org.cyberneko.html.parsers.SAXParser;
2017 import org.seasar.framework.container.S2Container;
21-import org.seasar.framework.log.Logger;
2218 import org.xml.sax.InputSource;
2319
2420 public class HtmlForwarder implements Forwarder {
21+ /**
22+ * Logger for this class
23+ */
24+ private static final Log log = LogFactory.getLog(HtmlForwarder.class);
25+
2526 private static final String DEFAULT_HTML_HANDLER_NAME = "defaultHtmlHandler";
2627
2728 private static final String DEFAULT_INPUT_ENCODING = "UTF-8";
2829
29- private static final Logger logger = Logger.getLogger(HtmlForwarder.class);
30-
3130 private S2Container container;
3231
3332 private String htmlHandlerName;
@@ -51,29 +50,9 @@
5150 props.get(SSOProxyConstraints.URL_PARAM));
5251 htmlHandler.getProperties().put(SSOProxyConstraints.PROXY_CONFIG_PARAM,
5352 props.get(SSOProxyConstraints.PROXY_CONFIG_PARAM));
54- // htmlHandler.getProperties().put(SSOProxyConstraints.REQUEST_PARAM,
55- // (String) props.get(SSOProxyConstraints.REQUEST_PARAM));
56- // htmlHandler.getProperties().put(SSOProxyConstraints.RESPONSE_PARAM,
57- // (String) props.get(SSOProxyConstraints.RESPONSE_PARAM));
5853
5954 InputSource inputSource = new InputSource(is);
6055 inputSource.setEncoding(inputEncoding);
61- // for debug
62- // InputSource inputSource;
63- // try {
64- // BufferedReader reader = new BufferedReader(new InputStreamReader(
65- // is, inputEncoding));
66- // System.out.println("TEST: " + reader.readLine());
67- // System.out.println("TEST: " + reader.readLine());
68- // System.out.println("TEST: " + reader.readLine());
69- // inputSource = new InputSource(reader);
70- // } catch (UnsupportedEncodingException e1) {
71- // inputSource = new InputSource(is);
72- // inputSource.setEncoding(inputEncoding);
73- // } catch (IOException e1) {
74- // inputSource = new InputSource(is);
75- // inputSource.setEncoding(inputEncoding);
76- // }
7756
7857 try {
7958 SAXParser parser = new SAXParser();
@@ -88,8 +67,8 @@
8867 }
8968 OutputStreamWriter osw = new OutputStreamWriter(os, encoding);
9069 osw.write(htmlHandler.toString());
91- if (logger.isDebugEnabled()) {
92- logger.debug("content=" + htmlHandler.toString());
70+ if (log.isDebugEnabled()) {
71+ log.debug("content=" + htmlHandler.toString());
9372 }
9473 osw.flush();
9574 } catch (Exception e) {
@@ -98,8 +77,9 @@
9877 // } catch (UnsupportedEncodingException e) {
9978 // } catch (SAXException e) {
10079 // } catch (IOException e) {
101- //TODO msg
102- throw new ForwarderException("TODO.msg", e);
80+ // error
81+ throw new ForwarderException("000006", new Object[] { props
82+ .get(SSOProxyConstraints.URL_PARAM) }, e);
10383 }
10484 }
10585
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/forwarder/impl/DirectForwarder.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/forwarder/impl/DirectForwarder.java (revision 7)
@@ -5,6 +5,7 @@
55 import java.io.OutputStream;
66 import java.util.Map;
77
8+import jp.sf.ssoproxy.SSOProxyConstraints;
89 import jp.sf.ssoproxy.SSOProxyException;
910 import jp.sf.ssoproxy.forwarder.Forwarder;
1011 import jp.sf.ssoproxy.forwarder.ForwarderException;
@@ -28,8 +29,9 @@
2829 bytes = null;
2930 }
3031 } catch (IOException e) {
31- //TODO
32- throw new ForwarderException("TODO.msg");
32+ // error
33+ throw new ForwarderException("000007", new Object[] { props
34+ .get(SSOProxyConstraints.URL_PARAM) }, e);
3335 }
3436 }
3537
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/util/MessageUtil.java (nonexistent)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/util/MessageUtil.java (revision 7)
@@ -0,0 +1,30 @@
1+package jp.sf.ssoproxy.util;
2+
3+import java.text.MessageFormat;
4+import java.util.Locale;
5+import java.util.ResourceBundle;
6+
7+public class MessageUtil {
8+ private static final String RESOURCE_MESSAGES = "jp.sf.ssoproxy.resource.Messages";
9+
10+ public static ResourceBundle getResourceBundle(Locale locale) {
11+ // TODO cache
12+ return ResourceBundle.getBundle(RESOURCE_MESSAGES, locale);
13+ }
14+
15+ public static String getMessage(String key, Locale locale) {
16+ return getMessage(key, null, locale);
17+ }
18+
19+ public static String getMessage(String key, Object[] args, Locale locale) {
20+ try {
21+ String msg = getResourceBundle(locale).getString(key);
22+ if (args != null) {
23+ msg = MessageFormat.format(msg, args);
24+ }
25+ return msg;
26+ } catch (Exception e) {
27+ return key;
28+ }
29+ }
30+}
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/util/ErrorHandlingUtil.java (nonexistent)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/util/ErrorHandlingUtil.java (revision 7)
@@ -0,0 +1,80 @@
1+package jp.sf.ssoproxy.util;
2+
3+import java.io.IOException;
4+import java.util.Locale;
5+
6+import javax.servlet.RequestDispatcher;
7+import javax.servlet.ServletException;
8+import javax.servlet.http.HttpServletRequest;
9+import javax.servlet.http.HttpServletResponse;
10+
11+import org.apache.commons.logging.Log;
12+import org.apache.commons.logging.LogFactory;
13+
14+import jp.sf.ssoproxy.SSOProxyConstraints;
15+import jp.sf.ssoproxy.SSOProxyException;
16+import jp.sf.ssoproxy.servlet.ProxyServlet;
17+
18+public class ErrorHandlingUtil {
19+
20+ /**
21+ * Logger for this class
22+ */
23+ private static final Log log = LogFactory.getLog(ProxyServlet.class);
24+
25+ public static void forwardErrorPage(HttpServletRequest request,
26+ HttpServletResponse response, Throwable t, String errorPage)
27+ throws ServletException, IOException {
28+ String errorCode = null;
29+ if (t instanceof SSOProxyException) {
30+ SSOProxyException spe = (SSOProxyException) t;
31+ errorCode = spe.getMessageId();
32+ forwardErrorPage(request, response, errorCode, spe.getArgs(),
33+ errorPage);
34+ } else {
35+ forwardErrorPage(request, response, "000001", null, errorPage);
36+ }
37+ }
38+
39+ public static void forwardErrorPage(HttpServletRequest request,
40+ HttpServletResponse response, String errorCode, Object[] args,
41+ String errorPage) throws ServletException, IOException {
42+ String errorMessage = MessageUtil.getMessage(errorCode, args, request
43+ .getLocale());
44+
45+ // TODO response status code
46+ response.setStatus(500);
47+
48+ request.setAttribute(SSOProxyConstraints.ERROR_CODE, errorCode);
49+ request.setAttribute(SSOProxyConstraints.ERROR_MESSAGE, errorMessage);
50+
51+ RequestDispatcher rd = request.getRequestDispatcher(errorPage);
52+ rd.forward(request, response);
53+ }
54+
55+ public static void printLog(Throwable t, Locale systemLocale) {
56+ String errorCode = null;
57+ String errorMessage = null;
58+ if (t instanceof SSOProxyException) {
59+ SSOProxyException spe = (SSOProxyException) t;
60+ errorCode = spe.getMessageId();
61+ errorMessage = MessageUtil.getMessage(errorCode, spe.getArgs(),
62+ systemLocale);
63+ } else {
64+ errorCode = "000001";
65+ errorMessage = MessageUtil.getMessage(errorCode, systemLocale);
66+ }
67+
68+ // TODO logging level
69+ log.error(errorMessage, t);
70+ }
71+
72+ public static void printLog(String errorCode, Object[] args,
73+ Locale systemLocale) {
74+ String errorMessage = MessageUtil.getMessage(errorCode, args,
75+ systemLocale);
76+
77+ // TODO logging level
78+ log.error(errorMessage);
79+ }
80+}
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
--- sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/SSOProxyConstraints.java (revision 6)
+++ sso-proxy/trunk/src/main/java/jp/sf/ssoproxy/SSOProxyConstraints.java (revision 7)
@@ -47,4 +47,14 @@
4747
4848 public static final String CURRENT_REMOTE_USER = "CurrentRemoteUser";
4949
50+ public static final String ERROR_CODE = "ErrorCode";
51+
52+ public static final String ERROR_MESSAGE = "ErrorMessage";
53+
54+ public static final String SYSTEM_LOCALE_KEY = "sytemLocale";
55+
56+ public static final String ERROR_JSP_KEY = "errorPage";
57+
58+ public static final String DEFAULT_ERROR_JSP = "/error.jsp";
59+
5060 }
--- sso-proxy/trunk/pom.xml (revision 6)
+++ sso-proxy/trunk/pom.xml (revision 7)
@@ -115,6 +115,16 @@
115115 <scope>provided</scope>
116116 </dependency>
117117 <dependency>
118+ <groupId>jstl</groupId>
119+ <artifactId>jstl</artifactId>
120+ <version>1.1.2</version>
121+ </dependency>
122+ <dependency>
123+ <groupId>taglibs</groupId>
124+ <artifactId>standard</artifactId>
125+ <version>1.1.2</version>
126+ </dependency>
127+ <dependency>
118128 <groupId>org.seasar.container</groupId>
119129 <artifactId>s2-framework</artifactId>
120130 <version>2.4.25</version>
@@ -146,6 +156,11 @@
146156 <version>2.3</version>
147157 </dependency>
148158 <dependency>
159+ <groupId>commons-logging</groupId>
160+ <artifactId>commons-logging</artifactId>
161+ <version>1.1.1</version>
162+ </dependency>
163+ <dependency>
149164 <groupId>nekohtml</groupId>
150165 <artifactId>nekohtml</artifactId>
151166 <version>0.9.5</version>
Show on old repository browser