package org.argeo.cms.internal.kernel;
import java.io.IOException;
+import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/** Abstract base class for http filters. */
abstract class HttpFilter implements Filter {
+ private final static Log log = LogFactory.getLog(HttpFilter.class);
+
protected abstract void doFilter(HttpSession httpSession,
HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws IOException, ServletException;
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
+ if (log.isDebugEnabled()) {
+ log.debug(request.getContextPath());
+ log.debug(request.getServletPath());
+ log.debug(request.getRequestURI());
+ log.debug(request.getQueryString());
+ StringBuilder buf = new StringBuilder();
+ Enumeration<String> en = request.getHeaderNames();
+ while (en.hasMoreElements()) {
+ String header = en.nextElement();
+ Enumeration<String> values = request.getHeaders(header);
+ while (values.hasMoreElements())
+ buf.append(" " + header + ": " + values.nextElement());
+ buf.append('\n');
+ }
+ log.debug(buf);
+ }
+
doFilter(request.getSession(), request,
(HttpServletResponse) servletResponse, filterChain);
}
// DAV
final static String WEBDAV_CONFIG = "/org/argeo/cms/internal/kernel/webdav-config.xml";
- final static String PATH_WEBDAV_PUBLIC = "/data/public";
- final static String PATH_WEBDAV_PRIVATE = "/data/files";
- final static String PATH_REMOTING_PUBLIC = "/data/pub";
- final static String PATH_REMOTING_PRIVATE = "/data/jcr";
+ final static String PATH_DATA = "/data";
+ final static String PATH_WEBDAV_PUBLIC = PATH_DATA + "/public";
+ final static String PATH_WEBDAV_PRIVATE = PATH_DATA + "/files";
+ final static String PATH_REMOTING_PUBLIC = PATH_DATA + "/pub";
+ final static String PATH_REMOTING_PRIVATE = PATH_DATA + "/jcr";
+
+ // RWT / RAP
final static String PATH_WORKBENCH_PUBLIC = "/ui/public";
}
private String httpAuthRealm = "Argeo";
// Filters
- // private final RootFilter rootFilter;
+ private final EntryPointFilter entryPointFilter;
// remoting
private OpenInViewSessionProvider sessionProvider;
+ ExtendedHttpService.class + " service.");
// Filters
- // rootFilter = new RootFilter();
+ entryPointFilter = new EntryPointFilter();
// DAV
sessionProvider = new OpenInViewSessionProvider();
registerRemotingServlet(PATH_REMOTING_PRIVATE, ALIAS_NODE, false,
privateRemotingServlet);
- // httpService.registerFilter("/", rootFilter, null, null);
+ httpService.registerFilter("/", entryPointFilter, null, null);
} catch (Exception e) {
throw new CmsException("Cannot publish HTTP services to OSGi", e);
}
try {
String credentials = new String(Base64.decodeBase64(st
.nextToken()), "UTF-8");
- log.debug("Credentials: " + credentials);
+ // log.debug("Credentials: " + credentials);
int p = credentials.indexOf(":");
if (p != -1) {
String login = credentials.substring(0, p).trim();
.trim();
return new UsernamePasswordAuthenticationToken(
- login, password);
+ login, password.toCharArray());
} else {
throw new CmsException(
"Invalid authentication token");
}
/** Intercepts all requests. Authenticates. */
- class RootFilter extends HttpFilter {
+ class EntryPointFilter extends HttpFilter {
@Override
public void doFilter(HttpSession httpSession,
HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
+ if (request.getServletPath().startsWith(PATH_DATA)) {
+ filterChain.doFilter(request, response);
+ return;
+ }
+
+ String path = request.getRequestURI().substring(
+ request.getServletPath().length());
+
+ if (!path.equals("")) {
+ String newLocation = request.getServletPath() + "#" + path;
+ response.setHeader("Location", newLocation);
+ response.setStatus(HttpServletResponse.SC_FOUND);
+ return;
+ }
+
// Authenticate from session
if (isSessionAuthenticated(httpSession)) {
filterChain.doFilter(request, response);
FilterChain filterChain) throws IOException, ServletException {
// Authenticate from session
- if (isSessionAuthenticated(httpSession)) {
- filterChain.doFilter(request, response);
- return;
- }
+ // if (isSessionAuthenticated(httpSession)) {
+ // filterChain.doFilter(request, response);
+ // return;
+ // }
// Process basic auth
String basicAuth = request.getHeader(HEADER_AUTHORIZATION);