You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by rm...@apache.org on 2012/02/10 22:27:45 UTC

svn commit: r1242933 - in /incubator/isis/trunk/framework/viewer/scimpi: scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/ scimpi-dispatcher/src/m...

Author: rmatthews
Date: Fri Feb 10 21:27:45 2012
New Revision: 1242933

URL: http://svn.apache.org/viewvc?rev=1242933&view=rev
Log:
Isis-162 combining Isis and Domain model authentication elements so pages are written the same irrespective of method.

Added:
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/RestrictAccess.java   (with props)
Modified:
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Names.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogonAction.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogoutAction.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Logon.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/User.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java Fri Feb 10 21:27:45 2012
@@ -509,7 +509,7 @@ public class Dispatcher {
     }
 
     public void debug(final DebugBuilder debug) {
-        debug.appendTitle("Actions");
+        debug.startSection("Actions");
         final Set<String> keySet = actions.keySet();
         final ArrayList<String> list = new ArrayList<String>(keySet);
         Collections.sort(list);

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Names.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Names.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Names.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Names.java Fri Feb 10 21:27:45 2012
@@ -20,6 +20,8 @@
 package org.apache.isis.viewer.scimpi.dispatcher;
 
 public interface Names {
+    static final String PREFIX = "_logon-";
+
     static final String BUTTON_TITLE = "button-title";
     static final String CANCEL_TO = "cancel-to";
     static final String COLLECTION = "collection";
@@ -69,7 +71,17 @@ public interface Names {
     static final String VIEW = "view";
     static final String VALUE = "value";
     static final String VERSION = "version";
+    static final String USER = "user";
     static final String VOID = "void";
     static final String WHEN = "when";
-    public static final String ENTRY_FIELDS = "entry-fields";
+    static final String ENTRY_FIELDS = "entry-fields";
+    
+    
+    static final String LOGON_OBJECT = PREFIX + OBJECT;
+    static final String LOGON_METHOD = PREFIX + METHOD;
+    static final String LOGON_SCOPE = PREFIX + SCOPE;
+    static final String LOGON_RESULT_NAME = PREFIX + RESULT_NAME;
+    static final String LOGON_FORM_ID = PREFIX + "form-id";
+    
+
 }

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java Fri Feb 10 21:27:45 2012
@@ -101,6 +101,7 @@ public abstract class RequestContext {
     private String resourceFile;
     private String resourceParentPath;
     private ObjectAdapter collection;
+    private boolean isUserAuthenticated;
 
     public RequestContext(final DebugUsers debugUsers) {
         this.debugUsers = debugUsers;
@@ -256,7 +257,8 @@ public abstract class RequestContext {
     // Debug
     // ////////////////////////////
     public void append(final DebugBuilder debug) {
-        debug.startSection("Request");
+        debug.startSection("Scimpi Request");
+        
         debug.appendTitle("User");
         final AuthenticationSession session = getSession();
         debug.appendln("Authentication Session", session);
@@ -377,6 +379,9 @@ public abstract class RequestContext {
         if (scope == Scope.SESSION && value != null && !(value instanceof Serializable)) {
             throw new ScimpiException("SESSION scoped variable (" + name + ") must be serializable: " + value);
         }
+        if (scope == Scope.SESSION) {
+            startHttpSession();
+        }
         removeExistingVariable(name);
         variables.get(scope).put(name, value);
     }
@@ -755,6 +760,7 @@ public abstract class RequestContext {
 
     public void setSession(final AuthenticationSession session) {
         this.session = session;
+        addVariable("_auth_session", session, Scope.SESSION);
     }
 
     public AuthenticationSession getSession() {
@@ -771,7 +777,9 @@ public abstract class RequestContext {
 
     public void setSessionData(final Map<String, Object> hashMap) {
         variables.put(Scope.SESSION, hashMap);
-        setSession((AuthenticationSession) getVariable("_auth_session"));
+        session = (AuthenticationSession) getVariable("_auth_session");
+        Boolean authenticated = (Boolean) getVariable("_authenticated");
+        isUserAuthenticated = authenticated != null && authenticated.booleanValue();
     }
 
     public Map<String, Object> getSessionData() {
@@ -809,4 +817,13 @@ public abstract class RequestContext {
 
     public void reset() {
     }
+
+    public boolean isUserAuthenticated() {
+        return isUserAuthenticated;
+    }
+    
+    public void setUserAuthenticated(boolean isUserAuthenticated) {
+        this.isUserAuthenticated = isUserAuthenticated;
+        addVariable("_authenticated", isUserAuthenticated, Scope.SESSION);
+    }
 }

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogonAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogonAction.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogonAction.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogonAction.java Fri Feb 10 21:27:45 2012
@@ -20,17 +20,25 @@
 package org.apache.isis.viewer.scimpi.dispatcher.logon;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.debug.DebugBuilder;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequestPassword;
 import org.apache.isis.viewer.scimpi.dispatcher.Action;
 import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
+import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
 import org.apache.isis.viewer.scimpi.dispatcher.UserManager;
 import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
 import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
 import org.apache.isis.viewer.scimpi.dispatcher.edit.FieldEditState;
 import org.apache.isis.viewer.scimpi.dispatcher.edit.FormState;
+import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
+
 
 // TODO this should work like EditAction so that logon page is repopulated
 public class LogonAction implements Action {
@@ -39,11 +47,61 @@ public class LogonAction implements Acti
     public void process(final RequestContext context) throws IOException {
         final String username = context.getParameter("username");
         final String password = context.getParameter("password");
-        final AuthenticationSession session = UserManager.authenticate(new AuthenticationRequestPassword(username, password));
+        final String actualFormId = context.getParameter("_" + FORM_ID);
+        final String expectedFormId = context.getParameter(LOGON_FORM_ID);
+        boolean isDomainLogon = expectedFormId != null && expectedFormId.equals(actualFormId);
+        boolean isValid;
+
+        AuthenticationSession session = null;
+        if (username.length() == 0 || password.length() == 0) {
+            isValid = false;
+        } else {
+            if (isDomainLogon) {
+                final String objectId = context.getParameter(LOGON_OBJECT);
+                final String scope = context.getParameter(LOGON_SCOPE);
+                final String methodName = context.getParameter(LOGON_METHOD);
+                String resultName = context.getParameter(LOGON_RESULT_NAME);
+                resultName = resultName == null ? "_" + USER : resultName;
+
+                final ObjectAdapter object = MethodsUtils.findObject(context, objectId);
+                final ObjectAction action = MethodsUtils.findAction(object, methodName);
+                final int parameterCount = action.getParameterCount();
+                final ObjectAdapter[] parameters = new ObjectAdapter[parameterCount];
+                List<ObjectActionParameter> parameters2 = action.getParameters();
+                if (parameters.length != 2) {
+                    throw new ScimpiException("Expected two parameters for the log-on method: " + methodName);
+                }
+
+                ParseableFacet facet = parameters2.get(0).getSpecification().getFacet(ParseableFacet.class);
+                parameters[0] = facet.parseTextEntry(null, username);
+                facet = parameters2.get(1).getSpecification().getFacet(ParseableFacet.class);
+                parameters[1] = facet.parseTextEntry(null, password);
+                final ObjectAdapter result = action.execute(object, parameters);
+                isValid = result != null;
+                if (isValid) {
+                    Scope scope2 = scope == null ? Scope.SESSION : RequestContext.scope(scope);
+                    final String resultId = context.mapObject(result, scope2);
+                    context.addVariable(resultName, resultId, scope);
+                    context.addVariable("_username", username, Scope.SESSION);
+                    
+                    context.clearVariable(LOGON_OBJECT, Scope.SESSION);
+                    context.clearVariable(LOGON_METHOD, Scope.SESSION);
+                    context.clearVariable(LOGON_RESULT_NAME, Scope.SESSION);
+                    context.clearVariable(LOGON_SCOPE, Scope.SESSION);
+                    context.clearVariable(PREFIX + "isis-user", Scope.SESSION);
+                    context.clearVariable(LOGON_FORM_ID, Scope.SESSION);
+                }
+                session = context.getSession();
+            } else {
+                session = UserManager.authenticate(new AuthenticationRequestPassword(username, password));
+                isValid = session != null;
+            }
+        }
 
         String view;
-        if (session == null) {
+        if (!isValid) {
             final FormState formState = new FormState();
+            formState.setForm(actualFormId);
             formState.setError("Failed to login. Check the username and ensure that your password was entered correctly");
             FieldEditState fieldState = formState.createField("username", username);
             if (username.length() == 0) {
@@ -58,12 +116,13 @@ public class LogonAction implements Acti
             }
             context.addVariable(ENTRY_FIELDS, formState, Scope.REQUEST);
 
-            view = context.getParameter("error");
+            view = context.getParameter(ERROR);
             context.setRequestPath("/" + view, Dispatcher.ACTION);
         } else {
             context.setSession(session);
             context.startHttpSession();
-            view = context.getParameter("view");
+            context.setUserAuthenticated(true);
+            view = context.getParameter(VIEW);
             if (view == null) {
                 // REVIEW this is duplicated in Logon.java
                 view = "start." + Dispatcher.EXTENSION;
@@ -78,10 +137,8 @@ public class LogonAction implements Acti
     }
 
     @Override
-    public void init() {
-    }
+    public void init() {}
 
     @Override
-    public void debug(final DebugBuilder debug) {
-    }
+    public void debug(final DebugBuilder debug) {}
 }

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogoutAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogoutAction.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogoutAction.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/logon/LogoutAction.java Fri Feb 10 21:27:45 2012
@@ -41,13 +41,16 @@ public class LogoutAction implements Act
 
     @Override
     public void process(final RequestContext context) throws IOException {
-        final AuthenticationSession session = context.getSession();
-        if (session != null) {
-            IsisContext.getUpdateNotifier().clear();
-            UserManager.logoffUser(session);
+        if (context.isUserAuthenticated()) {
+            final AuthenticationSession session = context.getSession();
+            if (session != null) {
+                IsisContext.getUpdateNotifier().clear();
+                UserManager.logoffUser(session);
+            }
             context.endHttpSession();
+            context.setUserAuthenticated(false);
         }
-
+        
         String view = context.getParameter("view");
         if (view == null) {
             view = context.getContextPath();

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java Fri Feb 10 21:27:45 2012
@@ -78,6 +78,7 @@ import org.apache.isis.viewer.scimpi.dis
 import org.apache.isis.viewer.scimpi.dispatcher.view.field.IncludeField;
 import org.apache.isis.viewer.scimpi.dispatcher.view.field.LinkField;
 import org.apache.isis.viewer.scimpi.dispatcher.view.logon.Logon;
+import org.apache.isis.viewer.scimpi.dispatcher.view.logon.RestrictAccess;
 import org.apache.isis.viewer.scimpi.dispatcher.view.logon.Secure;
 import org.apache.isis.viewer.scimpi.dispatcher.view.logon.User;
 import org.apache.isis.viewer.scimpi.dispatcher.view.simple.BlockDefine;
@@ -178,6 +179,7 @@ public class ProcessorLookup {
         addElementProcessor(new RemoveElement());
         addElementProcessor(new VersionNumber());
         addElementProcessor(new RunAction());
+        addElementProcessor(new RestrictAccess());
         addElementProcessor(new ScopeTag());
         addElementProcessor(new Secure());
         addElementProcessor(new SelectedObject());

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java Fri Feb 10 21:27:45 2012
@@ -60,11 +60,7 @@ public class Debug extends AbstractEleme
         if (request.getContext().isDebugDisabled()) {
             return;
         }
-
-        // Application | System | Specifications | Dispatcher | Context |
-        // Variables | Object | I18N File | Authorization
-        // File | Hide Debug
-
+        
         final String type = request.getOptionalProperty(TYPE);
 
         final boolean alwaysShow = request.isRequested("force", false);

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Logon.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Logon.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Logon.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/Logon.java Fri Feb 10 21:27:45 2012
@@ -25,6 +25,8 @@ import java.util.List;
 import org.apache.isis.core.commons.authentication.AnonymousSession;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
+import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
 import org.apache.isis.viewer.scimpi.dispatcher.edit.FieldEditState;
 import org.apache.isis.viewer.scimpi.dispatcher.edit.FormState;
 import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
@@ -37,35 +39,56 @@ public class Logon extends AbstractEleme
     @Override
     public void process(final Request request) {
         String view = request.getOptionalProperty(VIEW);
+        RequestContext context = request.getContext();
         if (view == null) {
-            view = (String) request.getContext().getVariable("login-path");
+            view = (String) context.getVariable("login-path");
         }
 
         final boolean isNotLoggedIn = IsisContext.getSession().getAuthenticationSession() instanceof AnonymousSession;
-        if (isNotLoggedIn) {
+        if (isNotLoggedIn) {            
             loginForm(request, view);
         }
     }
 
     public static void loginForm(final Request request, final String view) {
-        // String message = (String)
-        // request.getContext().examplegetVariable("login-failure");
-
+        String object = request.getOptionalProperty(OBJECT);
+        String method = request.getOptionalProperty(METHOD, "logon");
+        String result = request.getOptionalProperty(RESULT_NAME, "_user");
+        String resultScope = request.getOptionalProperty(SCOPE, Scope.SESSION.name());
+        String isisUser = request.getOptionalProperty("isis-user", "_web_default");
+        String formId = request.getOptionalProperty(FORM_ID, request.nextFormId());
+
+        // TODO error if all values are not set (not if use type is not set and all others are still defaults);
+
+        if (object != null) {
+            RequestContext context = request.getContext();
+            context.addVariable(LOGON_OBJECT, object, Scope.SESSION);
+            context.addVariable(LOGON_METHOD, method, Scope.SESSION);
+            context.addVariable(LOGON_RESULT_NAME, result, Scope.SESSION);
+            context.addVariable(LOGON_SCOPE, resultScope, Scope.SESSION);
+            context.addVariable(PREFIX + "isis-user", isisUser, Scope.SESSION);
+            context.addVariable(LOGON_FORM_ID, formId, Scope.SESSION);
+        }
+        
         final String error = request.getOptionalProperty(ERROR, request.getContext().getRequestedFile());
         final List<HiddenInputField> hiddenFields = new ArrayList<HiddenInputField>();
         hiddenFields.add(new HiddenInputField(ERROR, error));
         if (view != null) {
             hiddenFields.add(new HiddenInputField(VIEW, view));
         }
+        hiddenFields.add(new HiddenInputField("_" + FORM_ID, formId));
 
         final FormState entryState = (FormState) request.getContext().getVariable(ENTRY_FIELDS);
-        final InputField nameField = createdField("username", "User Name", InputField.TEXT, entryState);
+        boolean isforThisForm = entryState != null && entryState.isForForm(formId);
+        if (entryState != null && entryState.isForForm(formId)) {
+        }
+        final InputField nameField = createdField("username", "User Name", InputField.TEXT, isforThisForm ? entryState : null);
         final String width = request.getOptionalProperty("width");
         if (width != null) {
             final int w = Integer.valueOf(width).intValue();
             nameField.setWidth(w);
         }
-        final InputField passwordField = createdField("password", "Password", InputField.PASSWORD, entryState);
+        final InputField passwordField = createdField("password", "Password", InputField.PASSWORD, isforThisForm ? entryState : null);
         final InputField[] fields = new InputField[] { nameField, passwordField, };
 
         final String formTitle = request.getOptionalProperty(FORM_TITLE);
@@ -73,7 +96,9 @@ public class Logon extends AbstractEleme
         final String className = request.getOptionalProperty(CLASS, "login");
         final String id = request.getOptionalProperty(ID);
 
-        HtmlFormBuilder.createForm(request, "logon.app", hiddenFields.toArray(new HiddenInputField[hiddenFields.size()]), fields, className, id, formTitle, null, null, loginButtonTitle, entryState == null ? null : entryState.getError(), null);
+        HtmlFormBuilder.createForm(request, "logon.app", hiddenFields.toArray(new HiddenInputField[hiddenFields.size()]), fields,
+                className, id, formTitle, null, null, loginButtonTitle,
+                isforThisForm && entryState != null ? entryState.getError() : null , null);        
     }
 
     protected static InputField createdField(final String fieldName, final String fieldLabel, final int type, final FormState entryState) {

Added: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/RestrictAccess.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/RestrictAccess.java?rev=1242933&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/RestrictAccess.java (added)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/RestrictAccess.java Fri Feb 10 21:27:45 2012
@@ -0,0 +1,23 @@
+package org.apache.isis.viewer.scimpi.dispatcher.view.logon;
+
+import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+
+public class RestrictAccess extends AbstractElementProcessor {
+    private static final String LOGIN_VIEW = "login-view";
+    private static final String DEFAULT_LOGIN_VIEW = "login." + Dispatcher.EXTENSION;
+
+    public String getName() {
+        return "restrict-access";
+    }
+
+    public void process(Request request) {
+        if (!request.getContext().isUserAuthenticated()) { 
+            final String view = request.getOptionalProperty(LOGIN_VIEW, DEFAULT_LOGIN_VIEW);
+            request.getContext().redirectTo(view);
+        }
+    }
+
+}
+

Propchange: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/RestrictAccess.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/User.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/User.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/User.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/logon/User.java Fri Feb 10 21:27:45 2012
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.scimpi.dispatcher.view.logon;
 
-import org.apache.isis.core.commons.authentication.AnonymousSession;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
 import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
@@ -33,9 +32,9 @@ public class User extends AbstractElemen
 
     @Override
     public void process(final Request request) {
-        final boolean isLoggedIn = !(IsisContext.getSession().getAuthenticationSession() instanceof AnonymousSession);
+        final boolean isAuthenticatedn = request.getContext().isUserAuthenticated();
         request.appendHtml("<div class=\"user\">");
-        if (isLoggedIn) {
+        if (isAuthenticatedn) {
             displayUserAndLogoutLink(request);
         } else {
             displayLoginForm(request);
@@ -58,6 +57,9 @@ public class User extends AbstractElemen
     public void displayUserAndLogoutLink(final Request request) {
         String user = request.getOptionalProperty(NAME);
         if (user == null) {
+            user = (String) request.getContext().getVariable("_username");
+        }
+        if (user == null) {
             user = IsisContext.getAuthenticationSession().getUserName();
         }
         request.appendHtml("Welcome <span class=\"name\">");

Modified: incubator/isis/trunk/framework/viewer/scimpi/scimpi-servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/scimpi/scimpi-servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java?rev=1242933&r1=1242932&r2=1242933&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/scimpi/scimpi-servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java (original)
+++ incubator/isis/trunk/framework/viewer/scimpi/scimpi-servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java Fri Feb 10 21:27:45 2012
@@ -53,10 +53,12 @@ public class ServletRequestContext exten
     }
 
     public void append(final DebugBuilder view) {
+        super.append(view);
+
         /*
          * view.divider("System"); Runtime.getRuntime().
          */
-        view.appendTitle("Request");
+        view.startSection("HTTP Serviet Request");
         view.appendln("Auth type", request.getAuthType());
         view.appendln("Character encoding", request.getCharacterEncoding());
         view.appendln("Class", request.getClass());
@@ -117,8 +119,6 @@ public class ServletRequestContext exten
         view.appendln("Attributes", getAttributes(context));
         view.appendln("Init parameters", getParameters(context));
         view.appendln("Real path", context.getRealPath("/"));
-
-        super.append(view);
     }
 
     private String getAttributes(final ServletContext context) {
@@ -206,13 +206,15 @@ public class ServletRequestContext exten
         }
         return in;
     }
-
+    
     @Override
     public void startHttpSession() {
-        addVariable("_auth_session", getSession(), Scope.SESSION);
         final HttpSession httpSession = request.getSession(true);
-        final Map<String, Object> sessionData = getSessionData();
-        httpSession.setAttribute("scimpi-context", sessionData);
+        if (!httpSession.getAttributeNames().hasMoreElements()) {
+            final Map<String, Object> sessionData = getSessionData();
+            httpSession.setAttribute("scimpi-context", sessionData);
+            addVariable("_authenticated", false, Scope.SESSION);
+        }
     }
 
     @Override