【发布时间】:2015-08-10 12:46:36
【问题描述】:
我有一个登录页面,带有一个登录弹出窗口,其中包含用户名、密码和验证码。每次我尝试使用 ajax 发布表单(返回值为 json )时,我都会收到如下错误:
com.opensymphony.xwork2.ognl.OgnlValueStack - 设置表达式
'struts.token.name'的值为'[Ljava.lang.String;@53401791'ognl.OgnlException 时出错:getProperty(null, "token")的源为空
和
表单令牌 B4KX7L4ER1FXK5BRJZJ19QTGG4EGRGME 与会话令牌 null 不匹配
Login.jsp
<script>
var strutsToken = "<s:property value="#session['struts.tokens.token']" />";
</script>
和内部标签
<s:token/>
Signin.jsp(登录弹出窗口)
<script>
var strutsToken = "<s:property value="#session['struts.tokens.token']" />";
</script>
<script>
$(document).ready(function () {
// For making new captcha image
var df = "Captcha?token=" + strutsToken + "&struts.token.name=token";
$("#IMA").attr("src", df); // IMA is id of captcha image
$('#mini').click(function () { // mini is id of submit button
$.post('Auth', {
username: document.getElementById('username').value,
pass: document.getElementById('pass').value,
Captcha: document.getElementById('Captcha').value,
token: strutsToken,
'struts.token.name': "token"
}, function (jsonResponse) {
if (jsonResponse.res == "1") {
console.log('valid');
window.location = "campaign/campaign_dashboard.jsp";
}
else if (jsonResponse.res == "2") {
console.log('valid');
window.location = "Main.jsp";
} else {
$('#result').text(jsonResponse.res);
}
}, 'json');
});
});
</script>
Struts.xml
<interceptor-stack name="myStack">
<interceptor-ref name="authenticationInterceptor" > </interceptor-ref>
<interceptor-ref name="cachingHeadersInterceptor" />
<interceptor-ref name="fileUpload" >
</interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="params">
<param name="params.excludeParams">
token,dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*
</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
是什么阻止了令牌正确传递给操作?
【问题讨论】:
标签: java jsp struts2 csrf struts2-interceptors