Hi, James,
First, thanks for your advice. I guess the problem could be handled with
cookies i.e. by storing the shopping cart in a static HashMap, giving cookie
as the key. However, I still keep on searching for other solutions as well,
since I hope there is a possibility of keeping the current architecture as
it is.
Instead, Going back to my original code in ExtendedLoginUser, I would like
to know why the following snippet in the end of ExtendedLoginUser
user = (WebshopUser) data.getUser();
if (user != null)
user.setTemp("cart", cart);
does not set the temporary variable for anonymous user if the authentication
failed. I suppose that statement should be executed even though
LoginUser.doPerform() fails. Am I misunderstanding something in the control
flow of Turbine actions, or does Turbine somhow invalidate the user once
more after executing the lines above?
Regards,
Lauri Svan
[EMAIL PROTECTED]
----- Original Message -----
From: "James Cooper" <[EMAIL PROTECTED]>
To: "Turbine Users List" <[EMAIL PROTECTED]>
Sent: Tuesday, January 07, 2003 11:30 AM
Subject: RE: Storing temporary data in login
> Hi Lauri,
> I do something similar, generally I invoke the RunData.getUser.setTemp()
> method to store data that I do not want to persist for longer than the
> length of the session.
>
> For information that I want to store for longer than the session I use the
> RunData.getUser.setPerm(), but as you noticed this stores information
> serialised to the database and the user must have been logged in inorder
to
> use this.
>
> If you still want to store information without having to authenticate your
> user you could you cookies. I use a combination of all 3 but to simulate
> different behaviour. Your only problem is that using setPerm there is not
> obvious way to remove information once its stored there. Overwriting the
> object is one way, but thats not so pretty as since you're essentially
> storing information in a hashtable, to overwrite you must ensure that the
> object has the same hashcode.
>
> -----Original Message-----
> From: Lauri Svan [mailto:[EMAIL PROTECTED]]
> Sent: 06 January 2003 17:07
> To: [EMAIL PROTECTED]
> Subject: Storing temporary data in login
>
>
> Hi,
>
> I have been trying to implement a simple web shop having shopping carts,
> e-mail confirmations and such. So far Turbine has met most of the
> requirements. However, I have found one problem that I have difficulties
in
> overcoming.
>
> Majority of the pages (i.e. picking items to the shopping cart bean)
require
> no authorization. But when checking out, the user should be prompted for
> user name and password. I have implemented these by extending TurbineUser
> with my own class. However, when logging in, the cart object stored with
> RunData.setTemp() is lost. I tried to fix this by extending the
LoginAction
> used in authentication with my own class, which stores shopping cart in a
> temporary variable before calling super.doPerform(), and setting the cart
> back after the authentication is complete. This works fine if the
> authentication was ok, but somehow the cart is lost if authentication
> failed.
>
> What could be the cause of this problem and how could I fix it?
>
>
> The code snippet for extending the user is as follows:
>
>
> package com.ls.webshop.modules.actions;
> import org.apache.turbine.util.TurbineException;
> import org.apache.turbine.services.resources.TurbineResources;
>
> import org.apache.turbine.TurbineConstants;
> import org.apache.turbine.modules.actions.*;
> import org.apache.turbine.util.Log;
> import org.apache.turbine.util.RunData;
> import org.apache.turbine.services.resources.TurbineResources;
> import org.apache.turbine.services.security.TurbineSecurity;
> import org.apache.turbine.om.security.User;
> import org.apache.turbine.util.security.DataBackendException;
> import org.apache.turbine.util.security.TurbineSecurityException;
>
> import com.ls.webshop.util.business.*;
> import com.ls.webshop.om.WebshopUser;
>
> /**
> * Logins an user, with the meaning of not to clear the session prior to
> login.
> * Default configurations invalidate the session prior to executing
> doPerform.
> * To maintain a shopping cart in login, the login must be done otherwise,
> and
> * the cart should be saved in a temporary variable prior logging in.
> */
> public class ExtendedLoginUser extends LoginUser {
>
> public void doPerform(RunData data) throws Exception {
> /* Fetch the shopping cart of the user, use a new one if not exists */
> WebshopUser user = (WebshopUser) data.getUser();
> ShoppingCart cart = (ShoppingCart) user.getTemp("cart",
> new ShoppingCart());
>
> System.err.println("Authenticate");
> try {
> /* Invalidate the current session to provide a means for logging in */
> data.removeUserFromSession();
> super.doPerform(data);
> }
> catch(Exception e) {
> /* user = (WebshopUser) data.getUser();
> user.setTemp("cart", cart);
> throw e; */
> }
> user = (WebshopUser) data.getUser();
> if (user != null)
> user.setTemp("cart", cart);
> System.err.println("Setting next template");
>
> /* Check whether services.webshop.navigation.redirect.key parameter
> exists. If so, redirect there */
> String nextTemplate =
>
>
data.getParameters().get(TurbineResources.getString("services.webshop.naviga
> tion.redirect.key"));
> if (nextTemplate != null)
> data.setScreenTemplate(nextTemplate);
> }
> }
>
> Regards,
>
> Lauri Svan
> [EMAIL PROTECTED]
>
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>