Struts2 Struts 2使用tokenSession拦截器在提交后无法获取表单值
我有以下登录和安全登录的简单代码。对于安全登录,我在表单提交时使用tokenSession拦截器。在success.jsp中,如果我提交secureLogin,我无法获得userId值,但登录没有问题。有谁能帮我解释一下这背后的原因吗Struts2 Struts 2使用tokenSession拦截器在提交后无法获取表单值,struts2,token,Struts2,Token,我有以下登录和安全登录的简单代码。对于安全登录,我在表单提交时使用tokenSession拦截器。在success.jsp中,如果我提交secureLogin,我无法获得userId值,但登录没有问题。有谁能帮我解释一下这背后的原因吗 <%@ taglib prefix="s" uri="/struts-tags" %> <html> <body><LOGIN.JSP> <s:form action="login" > <
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body><LOGIN.JSP>
<s:form action="login" >
<s:textfield name="userId" label="Login Id"/><br>
<s:password name="password" label="Password"/><br>
<s:submit value="Login" align="center"/>
</s:form>
<s:form action="secureLogin" >
<s:textfield name="userId" label="Login Id"/><br>
<s:password name="password" label="Password"/><br>
<s:token />
<s:submit value="secureLogin" align="center"/>
</s:form>
</body>
</html>
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="tokenSession" class = "org.apache.struts2.interceptor.TokenSessionStoreInterceptor" />
</interceptors>
<global-results>
<result name="invalid.token">/error.jsp</result>
</global-results>
<action name="secureLogin" class="com.actions.HelloAction" method="secureLogin">
<result name="success">/success.jsp</result>
<result name="failure">/login.jsp</result>
<interceptor-ref name="tokenSession" />
</action>
<action name="login" class="com.actions.HelloAction" method="login">
<result name="success">/success.jsp</result>
<result name="failure">/login.jsp</result>
</action>
</package>
</struts>
package com.actions;
public class HelloAction {
private String userId;
private String password;
public String execute() {
return "success";
}
public String login(){
return "success";
}
public String secureLogin(){
return "success";
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>SUCCESS.JSP</title>
</head>
<body>
Welcome <b><s:property value="userId"/></b> , you have loged in. <br />
</body>
</html>
/error.jsp
/success.jsp
/login.jsp
/success.jsp
/login.jsp
包com.actions;
公共类HelloAction{
私有字符串用户标识;
私有字符串密码;
公共字符串execute(){
返回“成功”;
}
公共字符串登录(){
返回“成功”;
}
公共字符串secureLogin(){
返回“成功”;
}
公共字符串getUserId(){
返回用户标识;
}
public void setUserId(字符串userId){
this.userId=userId;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
}
SUCCESS.JSP
欢迎,您已登录
您需要一个拦截器堆栈
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="tokenSession" class = "org.apache.struts2.interceptor.TokenSessionStoreInterceptor" />
<interceptor-stack name="yourStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="tokenSession"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="yourStack"/>
<global-results>
<result name="invalid.token">/error.jsp</result>
</global-results>
</package>
</struts>
/error.jsp
这里有一个链接:如果您为某个操作声明任何拦截器,则必须为该操作声明所有拦截器。您不一定需要显式堆栈,尽管如果经常使用,这会很方便。