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 <[email protected]> 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
>