Author: husted
Date: Tue Mar 28 16:55:24 2006
New Revision: 389644

URL: http://svn.apache.org/viewcvs?rev=389644&view=rev
Log:
Action2 Apps
* Mailreader 
** Add double-submit guard
** Add custom AuthenticationInterceptor



Added:
    
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/AuthenticationInterceptor.java
   (with props)
Modified:
    struts/sandbox/trunk/action2/PRACTICES.txt
    struts/sandbox/trunk/action2/README.txt
    
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java
    struts/sandbox/trunk/action2/apps/mailreader/src/java/resources.properties
    
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ja.properties
    
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ru.properties
    struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml
    struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Error.jsp
    
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp
    
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Subscription.jsp

Modified: struts/sandbox/trunk/action2/PRACTICES.txt
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/PRACTICES.txt?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/PRACTICES.txt (original)
+++ struts/sandbox/trunk/action2/PRACTICES.txt Tue Mar 28 16:55:24 2006
@@ -37,3 +37,6 @@
 * Do not embed business logic in action classes.
  ** Remove business logic to a business facade that the actions can call. 
(Spring is an excellent way to build a business facade.)
  ** Actions are a necessary evil. Every line of code in an Action is guilty 
until proven innocent. Ideally, there should be one line of code that calls the 
business facade, and every other line of a code in an action should be bound to 
the framework.
+
+* Centralize other application and business logic into a base class that 
action can share. 
+

Modified: struts/sandbox/trunk/action2/README.txt
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/README.txt?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/README.txt (original)
+++ struts/sandbox/trunk/action2/README.txt Tue Mar 28 16:55:24 2006
@@ -136,7 +136,7 @@
 + Cancel 
 + Submit 
 + Submit (bad data)
-  Double submit
++ Double submit
 
 ----
 
@@ -157,7 +157,7 @@
 + Submit (invalid data)
 + Submit (data)
 + Submit (duplicate data)
-  Double submit
++ Double submit
 
 ----
 

Added: 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/AuthenticationInterceptor.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/AuthenticationInterceptor.java?rev=389644&view=auto
==============================================================================
--- 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/AuthenticationInterceptor.java
 (added)
+++ 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/AuthenticationInterceptor.java
 Tue Mar 28 16:55:24 2006
@@ -0,0 +1,31 @@
+package mailreader2;
+
+import com.opensymphony.xwork.interceptor.Interceptor;
+import com.opensymphony.xwork.ActionInvocation;
+import com.opensymphony.xwork.Action;
+import java.util.Map;
+import org.apache.struts.apps.mailreader.dao.User;
+
+public class AuthenticationInterceptor implements Interceptor  {
+
+    public void destroy () {}
+
+    public void init() {}
+
+    public String intercept(ActionInvocation actionInvocation) throws 
Exception {
+
+        Map session = actionInvocation.getInvocationContext().getSession();
+
+        User user = (User) session.get(Constants.USER_KEY);
+
+        boolean isAuthenticated = (null!=user) && (null!=user.getDatabase());
+
+        if (!isAuthenticated) {
+            return Action.LOGIN;            
+        }
+        else {
+            return actionInvocation.invoke();
+        }
+
+    }
+}

Propchange: 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/AuthenticationInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java
 (original)
+++ 
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java
 Tue Mar 28 16:55:24 2006
@@ -363,9 +363,8 @@
         User user;
 
         try {
-
-            user = findUser(username, password);
-        }
+            user = database.findUser(username);
+         }
 
         catch (ExpiredPasswordException e) {
             user = getUser(); // Just so that it is not null

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources.properties
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/resources.properties?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/resources.properties 
(original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/resources.properties 
Tue Mar 28 16:55:24 2006
@@ -21,7 +21,7 @@
 error.password.match=Password and confirmation password must match
 error.password.mismatch=Invalid username and/or password, please try again
 error.replyToAddress.format=Invalid format for Reply To Address
-error.transaction.token=Cannot submit this form out of order
+webwork.messages.invalid.token=Cannot submit this form out of order
 error.type.invalid=Server Type must be 'imap' or 'pop3'
 error.type.required=Server Type is required
 error.username.required=Username is required

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ja.properties
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ja.properties?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ja.properties 
(original)
+++ 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ja.properties 
Tue Mar 28 16:55:24 2006
@@ -18,7 +18,7 @@
 
error.password.match=\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u78BA\u8A8D\u7528\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u3066\u3044\u307E\u305B\u3093
 
error.password.mismatch=\u30E6\u30FC\u30B6\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E0D\u6B63\u3067\u3059\u3002\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
 
error.replyToAddress.format=\u8FD4\u4FE1\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
-error.transaction.token=\u3053\u306E\u30D5\u30A9\u30FC\u30E0\u306E\u5185\u5BB9\u304C\u6B63\u3057\u304F\u306A\u3044\u305F\u3081\u9001\u4FE1\u3059\u308B\u3053\u3068\u304C\u51FA\u6765\u307E\u305B\u3093
+webwork.messages.invalid.token=\u3053\u306E\u30D5\u30A9\u30FC\u30E0\u306E\u5185\u5BB9\u304C\u6B63\u3057\u304F\u306A\u3044\u305F\u3081\u9001\u4FE1\u3059\u308B\u3053\u3068\u304C\u51FA\u6765\u307E\u305B\u3093
 error.type.invalid=\u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u306F 'imap' \u304B 
'pop3'\u306E\u3069\u3061\u3089\u304B\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093
 
error.type.required=\u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
 
error.username.required=\u30E6\u30FC\u30B6\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ru.properties
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ru.properties?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ru.properties 
(original)
+++ 
struts/sandbox/trunk/action2/apps/mailreader/src/java/resources_ru.properties 
Tue Mar 28 16:55:24 2006
@@ -18,7 +18,7 @@
 error.password.match=\u041f\u0430\u0440\u043e\u043b\u044c \u0438 
\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 
\u043f\u0430\u0440\u043e\u043b\u044f \u043d\u0435 
\u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442.
 
error.password.mismatch=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435
 \u0438\u043c\u044f \u0438/\u0438\u043b\u0438 
\u043f\u0430\u0440\u043e\u043b\u044c - 
\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435, 
\u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, 
\u0441\u043d\u043e\u0432\u0430.
 error.replyToAddress.format=\u0412 \u043f\u043e\u043b\u0435 
'\u0410\u0434\u0440\u0435\u0441 
\u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430:' 
\u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 
\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c 
\u0444\u043e\u0440\u043c\u0430\u0442\u0435.
-error.transaction.token=\u042d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 
\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 
\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 - 
\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 
\u043f\u043e\u0440\u044f\u0434\u043a\u0430 
\u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f 
\u0434\u0430\u043d\u043d\u044b\u0445.
+webwork.messages.invalid.token=\u042d\u0442\u0430 
\u0444\u043e\u0440\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 
\u0431\u044b\u0442\u044c 
\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 - 
\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 
\u043f\u043e\u0440\u044f\u0434\u043a\u0430 
\u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f 
\u0434\u0430\u043d\u043d\u044b\u0445.
 error.type.invalid=\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 
\u0442\u0438\u043f\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 
\u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c 
\u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043b\u0438\u0448\u044c 'imap' 
\u0438\u043b\u0438 'pop3'
 error.type.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 
\u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f 
\u0441\u0435\u0440\u0432\u0435\u0440\u0430
 error.username.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 
\u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f 
\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f

Modified: struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml Tue Mar 28 
16:55:24 2006
@@ -5,10 +5,30 @@
 
     <package name="default" namespace="/" extends="webwork-default">
 
+        <interceptors>
+
+            <interceptor name="authenticate" 
class="mailreader2.AuthenticationInterceptor"/>
+
+            <interceptor-stack name="access" >
+                <interceptor-ref name="authenticate" />
+                <interceptor-ref name="defaultStack"/>
+            </interceptor-stack>
+
+            <interceptor-stack name="submit">
+                <interceptor-ref name="token-session" />
+                <interceptor-ref name="authenticate-access" />
+            </interceptor-stack>
+
+        </interceptors>
+
+        <default-interceptor-ref name="access"/>
+        
         <!-- default-action-ref name="Welcome"/ -->
 
         <global-results>
             <result name="error">/pages/Error.jsp</result>
+            <result name="invalid.token">/pages/Error.jsp</result>
+            <result name="login" type="redirect-action">Logon!input</result>
         </global-results>
 
         <global-exception-mappings>
@@ -26,15 +46,16 @@
          the framework logs an exception.
         -->
         <action name="Welcome" class="mailreader2.MailreaderSupport">
+            <interceptor-ref name="defaultStack"/>
             <result>/pages/Welcome.jsp</result>
         </action>
 
-        <action name="Logon"
-                class="mailreader2.Logon">
+        <action name="Logon" class="mailreader2.Logon">
+            <interceptor-ref name="defaultStack"/>
             <exception-mapping
                     
exception="org.apache.struts.apps.mailreader.dao.ExpiredPasswordException"
                     result="expired"/>
-            <result>/pages/MainMenu.jsp</result>
+            <result type="redirect-action">MainMenu</result>
             <result name="input">/pages/Logon.jsp</result>
             <result name="expired" type="chain">ChangePassword</result>
         </action>
@@ -55,6 +76,7 @@
         </action>
 
         <action name="RegistrationSave" class="mailreader2.RegistrationSave">
+            <interceptor-ref name="submit" />
             <result name="input">/pages/Registration.jsp</result>
             <result type="redirect-action">MainMenu</result>
         </action>
@@ -65,6 +87,7 @@
         </action>
 
         <action name="SubscriptionSave" class="mailreader2.SubscriptionSave">
+            <interceptor-ref name="submit" />
             <result name="input">/pages/Subscription.jsp</result>
             <result type="redirect-action">Registration!input</result>
         </action>

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Error.jsp
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Error.jsp?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Error.jsp 
(original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Error.jsp Tue 
Mar 28 16:55:24 2006
@@ -20,6 +20,8 @@
 
 <h3>Error Message</h3>
 
+<saf:actionerror />
+
 <p>
     <saf:property value="%{exception.message}"/>
 </p>

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp 
(original)
+++ 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp 
Tue Mar 28 16:55:24 2006
@@ -18,6 +18,7 @@
 
 <saf:actionerror/>
 <saf:form method="POST" validate="false">
+    <saf:token />
     <saf:hidden name="task"/>
     <saf:if test="task == 'Create'">
         <saf:textfield label="%{getText('username')}" name="username"/>

Modified: 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Subscription.jsp
URL: 
http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Subscription.jsp?rev=389644&r1=389643&r2=389644&view=diff
==============================================================================
--- 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Subscription.jsp 
(original)
+++ 
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Subscription.jsp 
Tue Mar 28 16:55:24 2006
@@ -21,6 +21,7 @@
 
 <saf:actionerror/>
 <saf:form method="POST" action="SubscriptionSave" validate="false">
+    <saf:token />
     <saf:hidden name="task"/>
     <saf:label label="%{getText('username')}" name="user.username"/>
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to