返回用户名和密码以登录表单grails spring security
Posted
技术标签:
【中文标题】返回用户名和密码以登录表单grails spring security【英文标题】:Return username and password to login form grails spring security 【发布时间】:2012-10-13 17:06:22 【问题描述】:当用户身份验证失败时,我希望将用户名和密码返回到表单。 我正在使用带有 Grails 和 Spring Security LDAP 的 spring security core 插件。我已经搜索了一段时间并想出了zip。有什么想法吗?
【问题讨论】:
【参考方案1】:来自UsernamePasswordAuthenticationFilter
javadoc:
如果要保留用户名,请将其缓存在自定义的 AuthenticationFailureHandler 中
至于密码,没有必要缓存它,因为出于安全原因,它不能放回表单密码字段。
【讨论】:
此外,这并不是您在大多数网站上看到的。 我实际上越来越多地看到它,只需擦除您不小心输入的最后一个字符非常方便【参考方案2】:供以后参考,因为上面的答案要么太模糊,对我们这些刚开始第一次学习这个框架的人没有帮助(提示这样的问题:AuthenticationFailureHandler
是什么?我该如何实现一个?如何将它连接到由<security:http>
命名空间处理程序神奇地创建的现有基础架构?)或不再工作(将用户名存储在SPRING_SECURITY_LAST_USERNAME
中的代码已从UsernamePasswordAuthenticationFilter
版本3.1 中删除。 0),这里是第一个答案的更多细节:
AuthenticationFailureHandler
来决定身份验证失败时的操作。
<security:http><security:form-login /></security:http>
提供的默认登录表单设置使用SimpleUrlAuthenticationFailureHandler
执行重定向到登录失败的 url(默认为/spring_security_login?login_error
)。
您可以使用<form-login>
元素的authentication-failure-handler-ref
属性来挂钩您自己的实现。
所以,我的实现如下所示:
public class UsernameStoringUrlAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler
@Override
public void onAuthenticationFailure (HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException
request.getSession (true).setAttribute ("SPRING_SECURITY_LAST_USERNAME", request.getParameter ("j_username"));
super.onAuthenticationFailure (request, response, exception);
这样配置的:
<security:form-login authentication-failure-handler-ref="authenticationFailureHandler" [...] />
...
<bean id="authenticationFailureHandler" class="my.package.UsernameStoringUrlAuthenticationFailureHandler" p:defaultFailureUrl="/LoginError" />
然后我可以使用 James Kleeh 在此处的回答中描述的相同方法访问失败的登录用户名,但由于框架的更改而不再有效。
【讨论】:
【参考方案3】:我能够执行以下操作以将用户名恢复到表单中:在 LoginController.groovy 中:
render view: view, model: [postUrl: postUrl,
rememberMeParameter: config.rememberMe.parameter,
lastUsername: request.getSession().getAttribute("SPRING_SECURITY_LAST_USERNAME")]
【讨论】:
SPRING_SECURITY_LAST_USERNAME
已弃用。
你能给我指出任何按照你的建议做的例子吗?我正在为如何做到这一点而苦苦挣扎。
只需实现AuthenticationFailureHandler
接口并配置spring-security即可使用。
这仍然有很多问题没有得到解答。举个例子就好了。
你试过了吗?什么不工作?无论如何,这对我来说似乎是另一个问题。以上是关于返回用户名和密码以登录表单grails spring security的主要内容,如果未能解决你的问题,请参考以下文章
Grails Spring Security 在身份验证之前预检查普通密码
Grails OpenLDAP 登录失败:抱歉,我们无法找到具有该用户名和密码的用户
Grails OAuth2 登录密码凭据授予返回 invalid_client