(Hoffentlich) der letzte Teil, der angepasst werden muss, damit die parametrisierten RelatedLinks funktionieren. Hier wird jetzt ebenfalls geprüft, ob außer der OID

noch weitere Parameter an die URL angehängt wurden. Diese werden dann auch an die erzeugte URL angehängt.

Mögliche Erweiterung: "Gefährliche" Parameter, z.B. output=xml, ausfiltern.


git-svn-id: https://svn.libreccm.org/ccm/trunk@635 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2010-11-25 08:40:00 +00:00
parent 1a574abe70
commit e3d3b435ac
1 changed files with 30 additions and 12 deletions

View File

@ -30,22 +30,21 @@ import com.arsdigita.kernel.URLFinderNotFoundException;
import com.arsdigita.persistence.OID;
import com.arsdigita.toolbox.ui.OIDParameter;
import java.util.Map;
import org.apache.log4j.Logger;
public class OIDRedirectServlet extends BaseServlet {
private static final Logger s_log =
Logger.getLogger(OIDRedirectServlet.class);
private static final Logger s_log =
Logger.getLogger(OIDRedirectServlet.class);
public static final String OID_PARAM = "oid";
private static final OIDParameter param = new OIDParameter(OID_PARAM);
@Override
protected void doService(HttpServletRequest sreq,
HttpServletResponse sresp)
throws ServletException, IOException {
throws ServletException, IOException {
OID oid = null;
try {
@ -55,19 +54,19 @@ public class OIDRedirectServlet extends BaseServlet {
sresp.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
if (oid == null) {
// fix for non-encoded OIDs,
// put in content body text using the link functionality
try {
oid = URLService.getNonencodedOID(sreq);
} catch (Exception e ) {
} catch (Exception e) {
// invalid OID value, return 400 Bad Request
sresp.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
if (s_log.isDebugEnabled()) {
s_log.debug("Tried to read non encoded OID, result: "+oid);
s_log.debug("Tried to read non encoded OID, result: " + oid);
}
if (oid == null) {
@ -78,15 +77,34 @@ public class OIDRedirectServlet extends BaseServlet {
return;
}
}
try {
String context = sreq.getParameter("context");
String url = URLService.locate(oid,context);
String url = URLService.locate(oid, context);
Map<?, ?> parameters = sreq.getParameterMap();
StringBuilder urlParams = new StringBuilder();
for (Map.Entry<?, ?> entry : parameters.entrySet()) {
if (!entry.getKey().equals("oid")) {
if (urlParams.length() == 0) {
urlParams.append('?');
} else {
urlParams.append('&');
}
String key = (String) entry.getKey();
String[] value = (String[]) entry.getValue();
if (value.length > 0) {
urlParams.append(String.format("%s=%s", key, value[0]));
}
}
}
url = url.concat(urlParams.toString());
if (s_log.isDebugEnabled()) {
s_log.debug("Redirecting oid " + oid + " to " + url);
}
throw new RedirectSignal(url, false);
} catch (URLFinderNotFoundException ex) {
if (s_log.isDebugEnabled()) {