You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2012/09/06 17:22:05 UTC

svn commit: r1381637 - in /qpid/trunk/qpid/java: broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ broker-plugins/m...

Author: kwall
Date: Thu Sep  6 15:22:04 2012
New Revision: 1381637

URL: http://svn.apache.org/viewvc?rev=1381637&view=rev
Log:
QPID-4255: Add "log out" functionality to web UI

* Added logout link to the Web Management UI (displayed once a user is logged in).
* Added operation logging (open/close event) to report the fact that the user
  has logged in, logged out (or gone away i.e. web session timeout).
* Allow Jetty web session timeout to be overridden from the config.xml

Work of Robbie Gemmell <ro...@apache.org> and myself.

Added:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/session/
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporter.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/session/
    qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporterTest.java
Modified:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/Management.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/Management.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/Management.java?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/Management.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/Management.java Thu Sep  6 15:22:04 2012
@@ -33,6 +33,7 @@ import org.apache.qpid.server.logging.me
 import org.apache.qpid.server.management.plugin.servlet.DefinedFileServlet;
 import org.apache.qpid.server.management.plugin.servlet.FileServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LogRecordsServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.MessageServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
@@ -67,10 +68,12 @@ import org.eclipse.jetty.util.ssl.SslCon
 
 public class Management
 {
-    private static final String OPERATIONAL_LOGGING_NAME = "Web";
-
     private final Logger _logger = Logger.getLogger(Management.class);
 
+    public static final String ENTRY_POINT_PATH = "/management";
+
+    private static final String OPERATIONAL_LOGGING_NAME = "Web";
+
     private final Broker _broker;
 
     private final Collection<Server> _servers = new ArrayList<Server>();
@@ -125,6 +128,7 @@ public class Management
                     + (sslPort == -1 ? "" : " HTTPS port " + sslPort));
         }
 
+        IApplicationRegistry appRegistry = ApplicationRegistry.getInstance();
         Server server = new Server();
 
         if (port != -1)
@@ -140,7 +144,6 @@ public class Management
 
         if (sslPort != -1)
         {
-            IApplicationRegistry appRegistry = ApplicationRegistry.getInstance();
             String keyStorePath = getKeyStorePath(appRegistry);
 
             SslContextFactory factory = new SslContextFactory();
@@ -178,7 +181,8 @@ public class Management
 
         root.addServlet(new ServletHolder(new SaslServlet(_broker)), "/rest/sasl");
 
-        root.addServlet(new ServletHolder(new DefinedFileServlet("index.html")), "/management");
+        root.addServlet(new ServletHolder(new DefinedFileServlet("index.html")), ENTRY_POINT_PATH);
+        root.addServlet(new ServletHolder(new LogoutServlet()), "/logout");
 
         root.addServlet(new ServletHolder(FileServlet.INSTANCE), "*.js");
         root.addServlet(new ServletHolder(FileServlet.INSTANCE), "*.css");
@@ -193,7 +197,7 @@ public class Management
 
         final SessionManager sessionManager = root.getSessionHandler().getSessionManager();
 
-        sessionManager.setMaxInactiveInterval(60 * 15);
+        sessionManager.setMaxInactiveInterval(appRegistry.getConfiguration().getHTTPManagementSessionTimeout());
 
         return server;
     }

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java Thu Sep  6 15:22:04 2012
@@ -18,7 +18,6 @@
  * under the License.
  *
  */
-
 package org.apache.qpid.server.management.plugin.servlet.rest;
 
 import java.io.IOException;
@@ -41,6 +40,7 @@ import org.apache.qpid.server.logging.Lo
 import org.apache.qpid.server.logging.RootMessageLogger;
 import org.apache.qpid.server.logging.actors.CurrentActor;
 import org.apache.qpid.server.logging.actors.HttpManagementActor;
+import org.apache.qpid.server.management.plugin.session.LoginLogoutReporter;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.registry.ApplicationRegistry;
 import org.apache.qpid.server.security.SubjectCreator;
@@ -50,6 +50,8 @@ import org.apache.qpid.server.security.a
 
 public abstract class AbstractServlet extends HttpServlet
 {
+    private static final String ATTR_LOGIN_LOGOUT_REPORTER = "attrLoginLogoutReporter";
+
     private static final Logger LOGGER = Logger.getLogger(AbstractServlet.class);
 
     protected static final String ATTR_SUBJECT = "subject";
@@ -292,7 +294,7 @@ public abstract class AbstractServlet ex
 
         if (subject != null)
         {
-            setSubjectInSession(subject, session);
+            setSubjectInSession(subject, request, session);
         }
         else
         {
@@ -327,7 +329,7 @@ public abstract class AbstractServlet ex
         HttpManagementActor actor = (HttpManagementActor) session.getAttribute(ATTR_LOG_ACTOR);
         if(actor == null)
         {
-            actor = new HttpManagementActor(_rootLogger, req.getRemoteAddr(), req.getRemotePort());
+            actor = createHttpManagementActor(req);
             session.setAttribute(ATTR_LOG_ACTOR, actor);
         }
 
@@ -339,9 +341,13 @@ public abstract class AbstractServlet ex
         return (Subject)session.getAttribute(ATTR_SUBJECT);
     }
 
-    protected void setSubjectInSession(Subject subject, final HttpSession session)
+    protected void setSubjectInSession(Subject subject, HttpServletRequest request, final HttpSession session)
     {
         session.setAttribute(ATTR_SUBJECT, subject);
+
+        LogActor logActor = createHttpManagementActor(request);
+        // Cause the user logon to be logged.
+        session.setAttribute(ATTR_LOGIN_LOGOUT_REPORTER, new LoginLogoutReporter(logActor, subject));
     }
 
     protected Broker getBroker()
@@ -353,4 +359,10 @@ public abstract class AbstractServlet ex
     {
         return InetSocketAddress.createUnresolved(request.getServerName(), request.getServerPort());
     }
+
+    private HttpManagementActor createHttpManagementActor(HttpServletRequest request)
+    {
+        return new HttpManagementActor(_rootLogger, request.getRemoteAddr(), request.getRemotePort());
+    }
+
 }

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java?rev=1381637&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java Thu Sep  6 15:22:04 2012
@@ -0,0 +1,65 @@
+/*
+ *
+ * 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.qpid.server.management.plugin.servlet.rest;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.qpid.server.management.plugin.Management;
+
+@SuppressWarnings("serial")
+public class LogoutServlet extends HttpServlet
+{
+    public static final String RETURN_URL_INIT_PARAM = "qpid.webui_logout_redirect";
+    private String _returnUrl = Management.ENTRY_POINT_PATH;
+
+    @Override
+    public void init(ServletConfig config) throws ServletException
+    {
+        super.init(config);
+
+        String initValue = config.getServletContext().getInitParameter(RETURN_URL_INIT_PARAM);
+        if(initValue != null)
+        {
+            _returnUrl = initValue;
+        }
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException
+    {
+        HttpSession session = request.getSession(false);
+        if(session != null)
+        {
+            // Invalidating the session will cause LoginLogoutReporter to log the user logoff.
+            session.invalidate();
+        }
+
+        resp.sendRedirect(_returnUrl);
+    }
+
+}

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java Thu Sep  6 15:22:04 2012
@@ -146,7 +146,7 @@ public class SaslServlet extends Abstrac
                 if(id == null)
                 {
                     SaslServer saslServer = subjectCreator.createSaslServer(mechanism, request.getServerName(), null/*TODO*/);
-                    evaluateSaslResponse(response, session, saslResponse, saslServer, subjectCreator);
+                    evaluateSaslResponse(request, response, session, saslResponse, saslServer, subjectCreator);
                 }
                 else
                 {
@@ -163,7 +163,7 @@ public class SaslServlet extends Abstrac
                     if(id.equals(session.getAttribute(ATTR_ID)) && System.currentTimeMillis() < (Long) session.getAttribute(ATTR_EXPIRY))
                     {
                         SaslServer saslServer = (SaslServer) session.getAttribute(ATTR_SASL_SERVER);
-                        evaluateSaslResponse(response, session, saslResponse, saslServer, subjectCreator);
+                        evaluateSaslResponse(request, response, session, saslResponse, saslServer, subjectCreator);
                     }
                     else
                     {
@@ -212,9 +212,9 @@ public class SaslServlet extends Abstrac
         }
     }
 
-    private void evaluateSaslResponse(final HttpServletResponse response,
-                                      final HttpSession session,
-                                      final String saslResponse, final SaslServer saslServer, SubjectCreator subjectCreator) throws IOException
+    private void evaluateSaslResponse(final HttpServletRequest request,
+                                      final HttpServletResponse response,
+                                      final HttpSession session, final String saslResponse, final SaslServer saslServer, SubjectCreator subjectCreator) throws IOException
     {
         final String id;
         byte[] challenge;
@@ -236,7 +236,8 @@ public class SaslServlet extends Abstrac
         {
             Subject subject = subjectCreator.createSubjectWithGroups(saslServer.getAuthorizationID());
 
-            setSubjectInSession(subject, session);
+            setSubjectInSession(subject, request, session);
+
             session.removeAttribute(ATTR_ID);
             session.removeAttribute(ATTR_SASL_SERVER);
             session.removeAttribute(ATTR_EXPIRY);

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporter.java?rev=1381637&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporter.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporter.java Thu Sep  6 15:22:04 2012
@@ -0,0 +1,103 @@
+/*
+ * 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.qpid.server.management.plugin.session;
+
+import java.security.Principal;
+import java.security.PrivilegedAction;
+
+import javax.security.auth.Subject;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpSessionBindingListener;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.server.logging.LogActor;
+import org.apache.qpid.server.logging.messages.ManagementConsoleMessages;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
+
+/**
+ * Logs {@link ManagementConsoleMessages#OPEN(String)} and {@link ManagementConsoleMessages#CLOSE(String)}
+ * messages.  A single instance of this class must be placed in the {@link HttpSession} immediately after
+ * the user has successfully logged-in, and removed (or the whole session invalidated) as the user logs out.
+ */
+public class LoginLogoutReporter implements HttpSessionBindingListener
+{
+    private static final Logger LOGGER = Logger.getLogger(LoginLogoutReporter.class);
+    private final LogActor _logActor;
+    private final Subject _subject;
+    private final Principal _principal;
+
+    public LoginLogoutReporter(LogActor logActor, Subject subject)
+    {
+        super();
+        _logActor = logActor;
+        _subject = subject;
+        _principal = AuthenticatedPrincipal.getAuthenticatedPrincipalFromSubject(_subject);
+    }
+
+    @Override
+    public void valueBound(HttpSessionBindingEvent arg0)
+    {
+        reportLogin();
+    }
+
+    @Override
+    public void valueUnbound(HttpSessionBindingEvent arg0)
+    {
+        reportLogout();
+    }
+
+    private void reportLogin()
+    {
+        if (LOGGER.isDebugEnabled())
+        {
+            LOGGER.debug("User logging in : " + _principal);
+        }
+
+        Subject.doAs(_subject, new PrivilegedAction<Void>()
+        {
+            @Override
+            public Void run()
+            {
+                _logActor.message(ManagementConsoleMessages.OPEN(_principal.getName()));
+                return null;
+            }
+        });
+    }
+
+    private void reportLogout()
+    {
+        if (LOGGER.isDebugEnabled())
+        {
+            LOGGER.debug("User logging out : " + _principal);
+        }
+
+        Subject.doAs(_subject, new PrivilegedAction<Void>()
+        {
+            @Override
+            public Void run()
+            {
+                _logActor.message(ManagementConsoleMessages.CLOSE(_principal.getName()));
+                return null;
+            }
+        });
+    }
+
+}

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html Thu Sep  6 15:22:04 2012
@@ -73,10 +73,8 @@
 
 <div id="pageLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline', gutters: false">
     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
-        <div id="header" class="header"></div>
-    </div>
-    <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
-        <div id="login"></div>
+        <div id="header" class="header" style="float: left; width: 300px"></div>
+        <div id="login" style="float: right"></div>
     </div>
     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'leading', splitter: true">
         <div qpid-type="treeView" qpid-props="query: 'rest/structure'" ></div>

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js Thu Sep  6 15:22:04 2012
@@ -170,13 +170,13 @@ var updateAuthentication = function upda
                 if(data.user)
                 {
                     dojo.byId("authenticatedUser").innerHTML = data.user;
-                    dojo.style(button.domNode, {visibility: 'hidden'});
-                    dojo.style(usernameSpan, {visibility: 'visible'});
+                    dojo.style(button.domNode, {display: 'none'});
+                    dojo.style(usernameSpan, {display: 'block'});
                 }
                 else
                 {
-                    dojo.style(button.domNode, {visibility: 'visible'});
-                    dojo.style(usernameSpan, {visibility: 'hidden'});
+                    dojo.style(button.domNode, {display: 'block'});
+                    dojo.style(usernameSpan, {display: 'none'});
                 }
             }
         );
@@ -198,13 +198,13 @@ require(["dijit/form/DropDownButton", "d
         dropDown: dialog
     });
 
-    usernameSpan = domConstruct.create("span", { innerHTML: '<strong>User: </strong><span id="authenticatedUser"></span>',
-                                                     style: { visibility: "hidden" }});
+    usernameSpan = domConstruct.create("span", { innerHTML: '<strong>User: </strong> <span id="authenticatedUser"></span><a href="logout">[logout]</a>',
+                                                     style: { display: "none" }});
 
 
     var loginDiv = dom.byId("login");
-    loginDiv.appendChild(button.domNode);
     loginDiv.appendChild(usernameSpan);
+    loginDiv.appendChild(button.domNode);
 
 
 

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporterTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporterTest.java?rev=1381637&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporterTest.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/session/LoginLogoutReporterTest.java Thu Sep  6 15:22:04 2012
@@ -0,0 +1,74 @@
+/*
+ * 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.qpid.server.management.plugin.session;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Matchers.argThat;
+
+import javax.security.auth.Subject;
+
+import org.apache.qpid.server.logging.LogActor;
+import org.apache.qpid.server.logging.LogMessage;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mockito;
+
+import junit.framework.TestCase;
+
+public class LoginLogoutReporterTest extends TestCase
+{
+    private LoginLogoutReporter _loginLogoutReport;
+    private Subject _subject = new Subject();
+    private LogActor _logActor = Mockito.mock(LogActor.class);
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+
+        _subject.getPrincipals().add(new AuthenticatedPrincipal("mockusername"));
+        _loginLogoutReport = new LoginLogoutReporter(_logActor, _subject);
+    }
+
+    public void testLoginLogged()
+    {
+        _loginLogoutReport.valueBound(null);
+        verify(_logActor).message(isLogMessageWithMessage("MNG-1007 : Open : User mockusername"));
+    }
+
+    public void testLogoutLogged()
+    {
+        _loginLogoutReport.valueUnbound(null);
+        verify(_logActor).message(isLogMessageWithMessage("MNG-1008 : Close : User mockusername"));
+    }
+
+    private LogMessage isLogMessageWithMessage(final String expectedMessage)
+    {
+        return argThat( new ArgumentMatcher<LogMessage>()
+        {
+            @Override
+            public boolean matches(Object argument)
+            {
+                LogMessage actual = (LogMessage) argument;
+                return actual.toString().equals(expectedMessage);
+            }
+        });
+    }
+}

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java Thu Sep  6 15:22:04 2012
@@ -605,6 +605,14 @@ public class ServerConfiguration extends
         return getBooleanValue("management.http.basic-auth", false);
     }
 
+    /**
+     * @return value in seconds
+     */
+    public int getHTTPManagementSessionTimeout()
+    {
+        return getIntValue("management.http.session-timeout", 60 * 15);
+    }
+
     public boolean getHTTPSManagementEnabled()
     {
         return getBooleanValue("management.https.enabled", false);
@@ -1064,4 +1072,5 @@ public class ServerConfiguration extends
     }
 
 
+
 }

Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java?rev=1381637&r1=1381636&r2=1381637&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/ServerConfigurationTest.java Thu Sep  6 15:22:04 2012
@@ -313,6 +313,19 @@ public class ServerConfigurationTest ext
         assertEquals(false, _serverConfig.getHTTPManagementEnabled());
     }
 
+    public void testGetHTTPManagementSessionTimeout() throws ConfigurationException
+    {
+        // Check default
+        _serverConfig.initialise();
+        assertEquals(60 * 15, _serverConfig.getHTTPManagementSessionTimeout());
+
+        // Check value we set
+        _config.setProperty("management.http.session-timeout", 60);
+        _serverConfig = new ServerConfiguration(_config);
+        _serverConfig.initialise();
+        assertEquals(60, _serverConfig.getHTTPManagementSessionTimeout());
+    }
+
     public void testGetHTTPManagementSaslAuthEnabled() throws ConfigurationException
     {
         // Check default



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org