You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shiro.apache.org by Takahiko Kawasaki <da...@gmail.com> on 2014/03/21 03:13:49 UTC
How to set values to username and rememberMe in a login form?
Hello,
How can I set values to 'username' input field and 'rememberMe' checkbox in
a login form when a user returns to the login page after login failure?
My shiro.ini contains the following.
[main]
shiro.loginUrl = /sign_in.jsp
[urls]
/sign_in.jsp = authc
And sign_in.jsp contains a form like below.
<form action="" method="POST" accept-charset="UTF-8">
<!-- Login ID or Email -->
<input placeholder="Login ID or Email"
value="What should be here?"
name="username" type="text" size="40"/>
<br/><br/>
<!-- Password -->
<input placeholder="Password"
value="" name="password"
type="password" value="" size="30"/>
<br/><br/>
<!-- Remember Me -->
<input name="rememberMe" type="checkbox" checked/>
Remember Me
<br/><br/>
<!-- Sign In -->
<input type="submit" value="Sign In">
</form>
'authc' filter works as documented. It does everything (= redirects to
/sign_in.jsp on login failure) without intermediation of any controller.
However, I don't know how to make authc set the values which the user input
during the last login trial to the 'username' input field and the '
rememberMe' checkbox (as to 'rememberMe', 'checked' should be added or
removed accordingly).
How should I write the form in sign_in.jsp?
Best Regards,
Takahiko Kawasaki
Re: How to set values to username and rememberMe in a login form?
Posted by Takahiko Kawasaki <da...@gmail.com>.
Really valuable information!
Thank you very much! I'll try it!
Best Regards,
Takahiko Kawasaki
On 2014/03/21, at 17:35, Dominic Farr <do...@gmail.com> wrote:
Without a controller or extending the authc filter you only have what shiro
give you on login failure....just the page.
There is a failureKeyAttribute (default:shiroLoginFailure) which is added
to the page request on login failure. This will tell you what the error was
via an exception. Like Unknown account, or IncorrectCredentials, etc.
<%=request.getAttribute("shiroLoginFailure")%> to show it in its raw
format. Although, I wouldn't use jsp expressions or expose this type of
granular information on a log in form.
You could extend AuthenticationFormFilter and override setFailureAttribute
method and extend it for your requirements.
public class PreserveFormOnFailureFormAuthenticationFilter extends
FormAuthenticationFilter {
@Override
protected void setFailureAttribute(ServletRequest request,
AuthenticationException ae) {
super.setFailureAttribute(request, ae);
request.setAttribute("username", request.getParameter("username"));
}
}
[main]
authc = PreserveFormOnFailureFormAuthenticationFilter
You can see it working in this demo app. See the readme section Extensions.
https://github.com/dominicfarr/skybird-shiro
On 21 March 2014 02:13, Takahiko Kawasaki <da...@gmail.com> wrote:
> Hello,
>
> How can I set values to 'username' input field and 'rememberMe' checkbox
> in a login form when a user returns to the login page after login failure?
>
> My shiro.ini contains the following.
>
> [main]
> shiro.loginUrl = /sign_in.jsp
>
> [urls]
> /sign_in.jsp = authc
>
> And sign_in.jsp contains a form like below.
>
> <form action="" method="POST" accept-charset="UTF-8">
> <!-- Login ID or Email -->
> <input placeholder="Login ID or Email"
> value="What should be here?"
> name="username" type="text" size="40"/>
> <br/><br/>
>
> <!-- Password -->
> <input placeholder="Password"
> value="" name="password"
> type="password" value="" size="30"/>
> <br/><br/>
>
> <!-- Remember Me -->
> <input name="rememberMe" type="checkbox" checked/>
> Remember Me
> <br/><br/>
>
> <!-- Sign In -->
> <input type="submit" value="Sign In">
> </form>
>
> 'authc' filter works as documented. It does everything (= redirects to
> /sign_in.jsp on login failure) without intermediation of any controller.
> However, I don't know how to make authc set the values which the user
> input during the last login trial to the 'username' input field and the '
> rememberMe' checkbox (as to 'rememberMe', 'checked' should be added or
> removed accordingly).
>
> How should I write the form in sign_in.jsp?
>
> Best Regards,
> Takahiko Kawasaki
>
Re: How to set values to username and rememberMe in a login form?
Posted by Dominic Farr <do...@gmail.com>.
Without a controller or extending the authc filter you only have what shiro
give you on login failure....just the page.
There is a failureKeyAttribute (default:shiroLoginFailure) which is added
to the page request on login failure. This will tell you what the error was
via an exception. Like Unknown account, or IncorrectCredentials, etc.
<%=request.getAttribute("shiroLoginFailure")%> to show it in its raw
format. Although, I wouldn't use jsp expressions or expose this type of
granular information on a log in form.
You could extend AuthenticationFormFilter and override setFailureAttribute
method and extend it for your requirements.
public class PreserveFormOnFailureFormAuthenticationFilter extends
FormAuthenticationFilter {
@Override
protected void setFailureAttribute(ServletRequest request,
AuthenticationException ae) {
super.setFailureAttribute(request, ae);
request.setAttribute("username", request.getParameter("username"));
}
}
[main]
authc = PreserveFormOnFailureFormAuthenticationFilter
You can see it working in this demo app. See the readme section Extensions.
https://github.com/dominicfarr/skybird-shiro
On 21 March 2014 02:13, Takahiko Kawasaki <da...@gmail.com> wrote:
> Hello,
>
> How can I set values to 'username' input field and 'rememberMe' checkbox
> in a login form when a user returns to the login page after login failure?
>
> My shiro.ini contains the following.
>
> [main]
> shiro.loginUrl = /sign_in.jsp
>
> [urls]
> /sign_in.jsp = authc
>
> And sign_in.jsp contains a form like below.
>
> <form action="" method="POST" accept-charset="UTF-8">
> <!-- Login ID or Email -->
> <input placeholder="Login ID or Email"
> value="What should be here?"
> name="username" type="text" size="40"/>
> <br/><br/>
>
> <!-- Password -->
> <input placeholder="Password"
> value="" name="password"
> type="password" value="" size="30"/>
> <br/><br/>
>
> <!-- Remember Me -->
> <input name="rememberMe" type="checkbox" checked/>
> Remember Me
> <br/><br/>
>
> <!-- Sign In -->
> <input type="submit" value="Sign In">
> </form>
>
> 'authc' filter works as documented. It does everything (= redirects to
> /sign_in.jsp on login failure) without intermediation of any controller.
> However, I don't know how to make authc set the values which the user
> input during the last login trial to the 'username' input field and the '
> rememberMe' checkbox (as to 'rememberMe', 'checked' should be added or
> removed accordingly).
>
> How should I write the form in sign_in.jsp?
>
> Best Regards,
> Takahiko Kawasaki
>