Index: contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/WebdavServlet.java
===================================================================
--- contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/WebdavServlet.java (revision 157618)
+++ contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/WebdavServlet.java (working copy)
@@ -15,6 +15,7 @@
*/
package org.apache.jackrabbit.server.simple;
+import org.apache.jackrabbit.server.DavSessionProvider;
import org.apache.jackrabbit.server.simple.dav.lock.SimpleLockManager;
import org.apache.jackrabbit.server.simple.dav.ResourceFactoryImpl;
import org.apache.jackrabbit.server.simple.dav.LocatorFactoryImpl;
@@ -23,13 +24,10 @@
import javax.servlet.*;
import javax.jcr.*;
import java.io.*;
-import java.util.HashSet;
import org.apache.log4j.Logger;
import org.apache.jackrabbit.server.AbstractWebdavServlet;
import org.apache.jackrabbit.webdav.*;
-import org.apache.jackrabbit.webdav.spi.JcrDavException;
-import org.apache.jackrabbit.client.RepositoryAccessServlet;
/**
* WebdavServlet provides webdav support (level 1 and 2 complient) for repository
@@ -57,6 +55,9 @@
/** the locator factory */
private DavLocatorFactory locatorFactory;
+ /** the session provider */
+ private DavSessionProvider sessionProvider;
+
/** the repository prefix retrieved from config */
private static String resourcePathPrefix;
@@ -102,8 +103,8 @@
WebdavResponse webdavResponse = new WebdavResponseImpl(response);
// make sure there is a authenticated user
- DavSession session = getSession(webdavRequest);
- if (session == null) {
+ sessionProvider.acquireSession(webdavRequest);
+ if (webdavRequest.getDavSession() == null) {
return;
}
@@ -159,6 +160,8 @@
// GET, HEAD, TRACE......
super.service(request, response);
}
+
+ sessionProvider.releaseSession(webdavRequest);
} catch (DavException e) {
response.sendError(e.getErrorCode());
}
@@ -193,92 +196,19 @@
}
/**
- * Retrieve the repository session for the given request object and force a header
- * authentication if necessary.
- *
- * @param request
- * @return a repository session for the given request or null if the
- * authentication is missing. In the latter case the authentication is
- * forces by the response code.
- * @throws DavException
+ * Returns the configured {@link DavSessionProvider}.
*/
- private DavSession getSession(WebdavRequest request) throws DavException {
- try {
- Credentials creds = RepositoryAccessServlet.getCredentialsFromHeader(request.getHeader(DavConstants.HEADER_AUTHORIZATION));
- if (creds == null) {
- // generate anonymous login to gain write access
- creds = new SimpleCredentials("anonymous", "anonymous".toCharArray());
- }
- Session repSession = RepositoryAccessServlet.getRepository().login(creds);
- DavSession ds = new DavSessionImpl(repSession);
- request.setDavSession(ds);
- return ds;
- } catch (RepositoryException e) {
- throw new JcrDavException(e);
- } catch (ServletException e) {
- throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
- }
+ public DavSessionProvider getDavSessionProvider() {
+ if (sessionProvider == null) {
+ sessionProvider = new DavSessionProviderImpl();
+ }
+ return sessionProvider;
}
/**
- * Inner class implementing the DavSession interface
+ * Configures a {@link DavSessionProvider}.
*/
- private class DavSessionImpl implements DavSession {
-
- /** the underlaying jcr session */
- private final Session session;
-
- /** the lock tokens of this session */
- private final HashSet lockTokens = new HashSet();
-
- /**
- * Creates a new DavSession based on a jcr session
- * @param session
- */
- private DavSessionImpl(Session session) {
- this.session = session;
- }
-
- /**
- * @see DavSession#addReference(Object)
- */
- public void addReference(Object reference) {
- throw new UnsupportedOperationException("No yet implemented.");
- }
-
- /**
- * @see DavSession#removeReference(Object)
- */
- public void removeReference(Object reference) {
- throw new UnsupportedOperationException("No yet implemented.");
- }
-
- /**
- * @see DavSession#getRepositorySession()
- */
- public Session getRepositorySession() {
- return session;
- }
-
- /**
- * @see DavSession#addLockToken(String)
- */
- public void addLockToken(String token) {
- lockTokens.add(token);
- }
-
- /**
- * @see DavSession#getLockTokens()
- */
- public String[] getLockTokens() {
- return (String[]) lockTokens.toArray(new String[lockTokens.size()]);
- }
-
- /**
- * @see DavSession#removeLockToken(String)
- */
- public void removeLockToken(String token) {
- lockTokens.remove(token);
- }
+ public void setDavSessionProvider(DavSessionProvider provider) {
+ sessionProvider = provider;
}
}
Index: contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/JCRWebdavServer.java
===================================================================
--- contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/JCRWebdavServer.java (revision 157618)
+++ contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/JCRWebdavServer.java (working copy)
@@ -27,7 +27,7 @@
/**
* JCRWebdavServer...
*/
-public class JCRWebdavServer {
+public class JCRWebdavServer implements DavSessionProvider {
/** the default logger */
private static Logger log = Logger.getLogger(JCRWebdavServer.class);
@@ -54,6 +54,7 @@
*
* @param request
* @throws DavException if no session could be obtained.
+ * @see DavSessionProvider#acquireSession(WebdavRequest)
*/
public void acquireSession(WebdavRequest request)
throws DavException {
@@ -67,6 +68,7 @@
* cache.
*
* @param request
+ * @see DavSessionProvider#releaseSession(WebdavRequest)
*/
public void releaseSession(WebdavRequest request) {
DavSession session = request.getDavSession();
@@ -288,4 +290,4 @@
return (HashSet) super.remove(key);
}
}
-}
\ No newline at end of file
+}