You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2006/03/29 02:55:26 UTC

svn commit: r389644 - in /struts/sandbox/trunk/action2: ./ apps/mailreader/src/java/ apps/mailreader/src/java/mailreader2/ apps/mailreader/src/webapp/pages/

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: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org