Spring Security - 如何在UsernamePasswordAuthenticationFilter中添加除用户名/密码之外的自定义参数

时间:2012-02-10 12:04:36

标签: authentication spring-security

我在我的应用中使用spring 3并面临一个问题。我在我的xml文件中配置了这样的spring security:

<bean id="authenticationFilter"     class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"
        p:authenticationManager-ref="myAuthenticationManager"
        p:authenticationFailureHandler-ref="customAuthenticationFailureHandler"
        p:authenticationSuccessHandler-ref="customAuthenticationSuccessHandler"
        p:sessionAuthenticationStrategy-ref="sas" p:usernameParameter="username"
        p:passwordParameter="password" **p:customparameter="mycustomparameter"** p:filterProcessesUrl="/validate_user.jspx"
        p:postOnly="true" />

但是在初始化spring上下文之后,我得到了mycustomparameter没有任何getter / setter而且找不到的异常,所以...

所以我需要将自定义param传递给我的自定义authenticatemanager类(我在身份验证对象中获取uname和pwd)。(我可能会在authentication.getDetails()中获得此附加信息) 此外,我在login.jsp页面中有这个字段,如 -

<s:hidden label="Password" id="login_form_mycustomparameter" name="mycustomparameter"
value="false" cssClass="txtbox" required="true" />

有可能吗? 如果没有,请建议其他方法来实现这一目标吗?

谢谢..

1 个答案:

答案 0 :(得分:0)

customparameter正在尝试调用不存在的UsernamePasswordAuthenticationFilter.setCustomparameter。因此,您需要创建一个自定义Filter,它扩展UsernamePasswordAuthenticationFilter并提供setCustomparameter方法。您创建的自定义过滤器然后需要创建包含此自定义参数的自定义身份验证对象。最后,您需要一个自定义AuthenticationProvider,然后在验证用户时使用自定义参数。