001 /*
002 * Copyright 2007 Ivan Dubrov
003 * Copyright 2007 Robin Helgelin
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.tynamo.security.services.impl;
019
020 import java.io.IOException;
021
022 import javax.servlet.Filter;
023 import javax.servlet.FilterChain;
024 import javax.servlet.ServletException;
025 import javax.servlet.ServletRequest;
026 import javax.servlet.ServletResponse;
027 import javax.servlet.http.HttpServletRequest;
028 import javax.servlet.http.HttpServletResponse;
029
030 import org.apache.tapestry5.services.HttpServletRequestFilter;
031 import org.apache.tapestry5.services.HttpServletRequestHandler;
032
033 public class HttpServletRequestFilterWrapper implements HttpServletRequestFilter {
034 private final Filter filter;
035
036 public HttpServletRequestFilterWrapper(final Filter filter) {
037 this.filter = filter;
038 }
039
040 public final boolean service(final HttpServletRequest request, final HttpServletResponse response, final HttpServletRequestHandler handler)
041 throws IOException {
042 // Assume request handled if filter chain is NOT executed
043 final boolean[] res = new boolean[] { true };
044 try {
045 filter.doFilter(request, response, new FilterChain() {
046 public void doFilter(final ServletRequest request, final ServletResponse response) throws IOException, ServletException {
047 res[0] = handler.service((HttpServletRequest) request, (HttpServletResponse) response);
048 }
049 });
050 } catch (ServletException e) {
051 IOException ex = new IOException(e.getMessage());
052 ex.initCause(e);
053 throw ex;
054 }
055 return res[0];
056 }
057 }