我是 Struts2 的初学者。我在 PHP 中使用,同时记录以将身份验证保存在会话变量中,我可以在注销后将其销毁。我想知道如何在 Struts2 中执行相同的过程:在登录时设置会话变量并在注销时销毁它。十分感谢。
更新(另一种解决方案)
除了有用的答案和评论外,我们还可以使用:
session.remove("session_var_name"); // instead of session.clear();
删除一个确切的会话变量,而不是删除所有会话变量。谢谢你们。
我是 Struts2 的初学者。我在 PHP 中使用,同时记录以将身份验证保存在会话变量中,我可以在注销后将其销毁。我想知道如何在 Struts2 中执行相同的过程:在登录时设置会话变量并在注销时销毁它。十分感谢。
更新(另一种解决方案)
除了有用的答案和评论外,我们还可以使用:
session.remove("session_var_name"); // instead of session.clear();
删除一个确切的会话变量,而不是删除所有会话变量。谢谢你们。
您可以执行以下操作之一
public class MyAction extends ActionSupport implements ServletRequestAware
{
private HttpServletRequest httpServletRequest;
public void setServletRequest(HttpServletRequest request)
{
this.httpServletRequest = request;
}
public String login()
{
httpServletRequest.getSession(false).setAttribute("key", your_session_object);
return SUCCESS;
}
public String logout()
{
httpServletRequest.getSession(false).removeAttribute("key");
return SUCCESS;
}
}
public class MyAction extends ActionSupport implements SessionAware
{
private Map sessionMap;
public void setSession(Map map)
{
this.sessionMap = map;
}
public String login()
{
sessionMap.put(key, your_session_object);
return SUCCESS;
}
public String logout()
{
sessionMap.remove(key);
return SUCCESS;
}
}
第二种选择,即实现SessionAware
是首选,因为它可以保护您免受Servlet
API 的影响。
您可以在调用注销时使用 Scope Interceptor,并且在您的 struts xml 配置中使用“end”类型,Interceptor 将 null 设置为您的会话对象:
<action name="scopea" class="com.mevipro.test.action.ScopeActionA">
<result name="success" type="dispatcher">/jsp/test.jsp</result>
<interceptor-ref name="basicStack"/>
<interceptor-ref name="scope">
<param name="key">funky</param>
<param name="session">person</param>
<param name="type">start</param>
</interceptor-ref>
</action>
<action name="scopeb" class="com.mevipro.test.action.ScopeActionB">
<result name="success" type="dispatcher">/jsp/test.jsp</result>
<interceptor-ref name="scope">
<param name="key">funky</param>
<param name="session">person</param>
<param name="type">end</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
</action>
您必须定义“开始”和“结束”,开始是在会话中初始化对象时,“结束”用于销毁对象
更多细节:https ://struts.apache.org/docs/scope-interceptor.html