On 4/19/07, Allen Gilliland <[EMAIL PROTECTED]> wrote:


Matt Raible wrote:
> The old code probably did some checking in the edit() method to see if
> the user logged in with Remember Me. If so, it set that value, which
> the JSP checked and hid the fields for.

I looked at that, but all that I can see is a conditional in the edit()
method which adds an action message if it's a cookie login, and in the
jsp it doesn't show the password fields if it's a cookie login.  I
couldn't find anywhere in the code where that cookie login state is
actually set, the only thing i can think of is if it happens inside of
the Acegi code.


That's weird - here's what I use in AppFuse in the UserAction.edit() method:

   // if user logged in with remember me, display a warning that they
can't change passwords
   log.debug("checking for remember me login...");

   AuthenticationTrustResolver resolver = new
AuthenticationTrustResolverImpl();
   SecurityContext ctx = SecurityContextHolder.getContext();

   if (ctx != null) {
       Authentication auth = ctx.getAuthentication();

       if (resolver.isRememberMe(auth)) {
           getSession().setAttribute("cookieLogin", "true");
           saveMessage(getText("userProfile.cookieLogin"));
       }
   }

>
> A better solution for the JSP is to remove the fields completely, then
> use a Preparable interface on UserAction (or whatever its called) to
> refetch the user on save. That way, all the values from the database
> would be retained, and any ones specified in request parameters (from
> the form) would be overwritten.

Well, we do lookup the user when a profile save happens and we only set
the properties which are allowed to be changed.  I don't think it's good
usability to remove the password fields though.  If someone is logged in
via a remember me cookie then they should be in equal standing with any
other logged in user.

I'm fine with that, but when I first started digging into the Remember
Me stuff (years ago) a lot of folks recommended that it not be given
the same status as a user who logs in with a keyboard.

Matt


-- Allen


>
> Matt
>
> On 4/19/07, Allen Gilliland <[EMAIL PROTECTED]> wrote:
>> I just wanted to send this out to make sure I am not wrong about this.
>> In the new struts2 profile update form I have removed a small amount of
>> code which tried to prevent users who were logged in via a 'cookieLogin'
>> from changing their passwords.  I don't really know the history behind
>> this code and don't even know if it was working anymore, but I am
>> removing it because ...
>>
>> 1. It *looks* like it doesn't even take effect anymore because I can't
>> find anywhere in the code which sets the "cookieLogin" attribute on a
>> session to trigger the behavior.
>>
>> 2. The old code wasn't actually preventing this scenario, it was only
>> discouraging it.  In the old action & jsp it would simply not display
>> the password form fields when the user had logged in via cookie, but
>> technically if you submitted the form with the right fields the action
>> would accept them and modify the password.
>>
>> 3. If this is still a valid security constraint that we want to imply
>> then I think we can do it in a better way, i.e. to ask for the users
>> existing password on the profile update form at all times.  Personally I
>> think this would be overkill, but it's not necessarily unreasonable.
>>
>> So, if anyone who knows more about this old "cookieLogin" check thinks
>> it still needs to be in the code, please say so.
>>
>> -- Allen
>>
>
>



--
http://raibledesigns.com

Reply via email to