我想要做的是在我的登录页面上读取一个http参数,例如login.html?param=value
,然后将value
传递给我的AuthenticationProvider。我的想法是以某种方式将value
保存在隐藏参数中,但我仍然不知道如何传递它。
这可能吗?我该如何去做?
编辑:按照Sanath的建议,在做了一些阅读之后,我终于能够解决问题 - 如果你对我的工作感兴趣,请看下面。
答案 0 :(得分:6)
我做了以下事情,最后它就像一个魅力。
在我的bean配置文件中,我必须输入:
<http auto-config="true>
...
<form-login ... authentication-details-source-ref="myWebAuthDetSource"/>
...
</http>
<beans:bean id="myWebAuthDetSource" class="com.my.pack.age.MyWebAuthDetSource"/>
...
然后我按照以下方式设置了我的WebAuthenticationDetailsSource
实现:
public class MyWebAuthDetSource implements AuthenticationDetailsSource<HttpServletRequest, MyWebAuthDets> {
public MyWebAuthDetSource buildDetails (HttpServletRequest context) {
return new MyWebAuthDets(context);
}
}
然后我得到了AuthenticationDetails
实现,如:
public class MyWebAuthDets extends WebAuthenticationDetails {
private final String parameter;
public MyWebAuthDets(HttpServletRequest request) {
super(request);
this.parameter = request.getParameter("paramId");
}
}
然后我忽略了最简单的事实,即身份验证过程仅处理从登录表单提交的内容,因此我只需在login.jsp中添加以下内容:
...
<form id="j_spring_security_check" ... >
<input type="hidden" name="paramID" value="${param['paramID']}" />
...
</form>
...
就是这样。现在,我可以添加authenticationProvider
并使用.getDetails()
中的authenticationToken
获取参数。
再次感谢@Sanath。