Author: woonsan Date: Wed Sep 30 11:24:51 2009 New Revision: 820251 URL: http://svn.apache.org/viewvc?rev=820251&view=rev Log: JS2-1071: Adding source code header and example link rewriting adaptor
Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java (with props) Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultSSOSiteCredentials.java portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultSSOSiteCredentials.java URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultSSOSiteCredentials.java?rev=820251&r1=820250&r2=820251&view=diff ============================================================================== --- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultSSOSiteCredentials.java (original) +++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultSSOSiteCredentials.java Wed Sep 30 11:24:51 2009 @@ -1,3 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.apache.portals.applications.webcontent.proxy.impl; import org.apache.portals.applications.webcontent.proxy.SSOSiteCredentials; Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java?rev=820251&r1=820250&r2=820251&view=diff ============================================================================== --- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java (original) +++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java Wed Sep 30 11:24:51 2009 @@ -64,6 +64,7 @@ import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyService; import org.apache.portals.applications.webcontent.proxy.SSOSiteCredentials; import org.apache.portals.applications.webcontent.proxy.SSOSiteCredentialsProvider; +import org.apache.portals.applications.webcontent.rewriter.ParserAdaptor; import org.apache.portals.applications.webcontent.rewriter.Rewriter; import org.apache.portals.applications.webcontent.rewriter.RewriterController; import org.apache.portals.applications.webcontent.rewriter.rules.Ruleset; @@ -91,7 +92,7 @@ private String hostHeaderValue; /** - * forced local base url. e.g., "http://localhost:8080/jetspeed/webcontent". + * forced local base url. e.g., "/webcontent/rproxy". */ private String localBaseURL; @@ -191,11 +192,6 @@ } } - if (localBaseURL == null) - { - localBaseURL = request.getScheme() + "://" + hostHeaderValue + request.getContextPath() + request.getServletPath(); - } - String proxyTargetURL = proxyPathMapper.getRemoteURL(pathInfo); if (proxyTargetURL == null) @@ -475,22 +471,59 @@ } } - String responseCharSet = EntityUtils.getContentCharSet(httpEntity); + ParserAdaptor parserAdaptor = null; - if (responseCharSet != null) + try { - reader = new InputStreamReader(in, responseCharSet); - writer = new OutputStreamWriter(out, responseCharSet); + parserAdaptor = rewriterController.createParserAdaptor(mimeType); } - else + catch (Exception e) { - reader = new InputStreamReader(in); - writer = new OutputStreamWriter(out); + if (log.isDebugEnabled()) + { + log.error("Failed to create parser adaptor.", e); + } + else + { + log.error("Failed to create parser adaptor. {}", e.toString()); + } } - rewriter.setBaseUrl(localBaseURL + request.getPathInfo()); - rewriter.rewrite(rewriterController.createParserAdaptor(mimeType), reader, writer); - writer.flush(); + if (parserAdaptor == null) + { + IOUtils.copy(in, out); + out.flush(); + } + else + { + String responseCharSet = EntityUtils.getContentCharSet(httpEntity); + + if (responseCharSet != null) + { + reader = new InputStreamReader(in, responseCharSet); + writer = new OutputStreamWriter(out, responseCharSet); + } + else + { + reader = new InputStreamReader(in); + writer = new OutputStreamWriter(out); + } + + String contentBaseURL = null; + + if (localBaseURL != null) + { + contentBaseURL = localBaseURL + request.getPathInfo(); + } + else + { + contentBaseURL = request.getContextPath() + request.getServletPath() + request.getPathInfo(); + } + + rewriter.setBaseUrl(contentBaseURL); + rewriter.rewrite(parserAdaptor, reader, writer); + writer.flush(); + } } } } Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java?rev=820251&view=auto ============================================================================== --- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java (added) +++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java Wed Sep 30 11:24:51 2009 @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.portals.applications.webcontent.proxy.impl; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.io.Writer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.LineIterator; +import org.apache.commons.lang.StringUtils; +import org.apache.portals.applications.webcontent.rewriter.ParserAdaptor; +import org.apache.portals.applications.webcontent.rewriter.Rewriter; +import org.apache.portals.applications.webcontent.rewriter.RewriterException; + +/** + * A simple reverse proxy link rewriting parser adaptor implementation. + * <P> + * You can refer to this example to implement more sophisticated rewriting parser adaptor. + * </P> + * + * @version $Id$ + */ +public class SimpleLinkRewritingParserAaptor implements ParserAdaptor +{ + + private Pattern linkBasePathPattern = Pattern.compile("\\s(href|src|action)\\s*=\\s*['\"]((\\/)[^'\"]+)['\"]", Pattern.CASE_INSENSITIVE); + + public SimpleLinkRewritingParserAaptor() + { + } + + public void rewrite(Rewriter rewriter, Reader reader, Writer writer) throws RewriterException + { + String baseURL = rewriter.getBaseUrl(); + int offset = baseURL.lastIndexOf('/'); + + if (StringUtils.isBlank(baseURL) || offset != -1) + { + try + { + IOUtils.copy(reader, writer); + } + catch (IOException e) + { + throw new RewriterException(e); + } + } + + baseURL = baseURL.substring(0, offset + 1); + + PrintWriter out = new PrintWriter(new BufferedWriter(writer)); + + for (LineIterator lineIt = IOUtils.lineIterator(reader); lineIt.hasNext(); ) + { + String line = lineIt.nextLine(); + Matcher linkBasePathMatcher = linkBasePathPattern.matcher(line); + out.println(linkBasePathMatcher.replaceAll(" $1=\"" + baseURL + "$2\"")); + } + + out.flush(); + } + + public void parse(Rewriter rewriter, Reader reader) throws RewriterException + { + throw new UnsupportedOperationException(); + } + +} Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java ------------------------------------------------------------------------------ svn:keywords = Id Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java ------------------------------------------------------------------------------ svn:mime-type = text/plain