如何在struts2中设置和销毁会话变量?

时间:2012-07-16 13:10:34

标签: struts2 session-variables destroy

我是Struts2的初学者。我在PHP中使用,同时记录以在会话变量中保存身份验证,我可以在注销后销毁它。我想知道如何在Struts2中执行相同的过程:登录时设置 会话变量,并在注销时销毁。非常感谢。

更新(附加解决方案)

除了有用的答案和评论外,我们还可以使用:

session.remove("session_var_name"); // instead of session.clear();

删除一个确切的会话变量,而不是删除所有会话变量。谢谢大家。

2 个答案:

答案 0 :(得分:4)

您可以执行以下某项操作

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的攻击。<​​/ p>

答案 1 :(得分:0)

您可以在调用注销时使用Scope Interceptor,并使用&#34; end&#34;输入你的struts xml配置,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>

你必须定义&#34;开始&#34;和&#34;结束&#34;开始时是在会话中初始化对象并且&#34;结束&#34;摧毁你的对象

更多详情:https://struts.apache.org/docs/scope-interceptor.html