我的webwork2的cookie拦截器

原创 2004年10月10日 13:13:00
webwork中没有cookie的映射,只有session的映射. 参考了moxie的cookie拦截器,自己写了一个拦截器,不知道是不是能用 :P

拦截器代码如下:
 
package com.cnscud.util.interceptor;
 
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.cnscud.util.WebCookies;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.AroundInterceptor;
import com.opensymphony.xwork.util.OgnlValueStack;
/**
 * Cookie拦截器,在Action里增加getWebCookies
 *
 * 参考moxie的cookie测试拦截器.
 *
 * @author scud 2004.10
 *
 */
public class WebCookiesInterceptor extends AroundInterceptor
{
    protected void after(ActionInvocation arg0, String arg1) throws Exception
    {
    }
    protected void before(ActionInvocation arg0) throws Exception
    {
        HttpServletResponse response = ServletActionContext.getResponse();
        HttpServletRequest request = ServletActionContext.getRequest();
       
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0)
        {
            final OgnlValueStack stack = ServletActionContext.getContext().getValueStack();
           
            WebCookies aWCs = new WebCookies(request,response,cookies);           
            stack.setValue(WebCookies.KEY_WEBCOOKIES,aWCs);
        }
    }
}

WebCookies的代码如下:
 
package com.cnscud.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.*;
/*
 * WebCookies类
 *
 * 写一个cookie类来代替Cookie就不用依赖javax.servlet.http了 (TODO)
 *
 * @author scud 2004.10
 * 
 */
public class WebCookies
{
    /** ValueStack里面的键值 */
    public static final String KEY_WEBCOOKIES = "webCookies";
    private HttpServletRequest request;
    private HttpServletResponse response;
    private Cookie[] cookies;
    private Map cookieMap = new HashMap(20);
    /**
     * 构造函数
     *
     * @param request
     * @param response
     * @param cookies
     */
    public WebCookies(HttpServletRequest request, HttpServletResponse response,
            Cookie[] cookies)
    {
        this.request = request;
        this.response = response;
        setCookies(cookies);
    }
    /**
     * 设置Cookie数组
     *
     * @param cookies
     */
    public void setCookies(Cookie[] cookies)
    {
        cookieMap.clear();
        this.cookies = cookies;
        for (int i = 0; i < cookies.length; i++)
        {
            Cookie acookie = cookies[i];
            cookieMap.put(acookie.getName(), acookie);
        }
    }
    /**
     * 得到cookie数组
     *
     * @return cookie的数组
     */
    public Cookie[] getCookies()
    {
        return cookies;
    }
    /**
     * 得到某个cookie
     *
     * @param sKey 键名
     * @return 对应的cookie
     */
    public Cookie getCookie(String sKey)
    {
        if (null == cookieMap)
        {
            return null;
        }
        Object ac = cookieMap.get(sKey);
        if (null != ac)
        {
            return (Cookie) ac;
        }
        return null;
    }
    public Cookie get(String sKey)
    {
        return getCookie(sKey);
    }
   
    public Map getCookieMap()
    {
        return cookieMap;
    }
    /**
     * 添加一个cookie设置到HttpServletResponse中去
     *
     * @param aCookie
     */
    public void addCookie(Cookie aCookie)
    {
        //调用response的addCookie
        if (null != response)
        {
            response.addCookie(aCookie);
        }
    }
}
 
基础Action的代码如下: (其他action继承此Action即可)
 
package test;
import com.cnscud.util.WebCookies;
import com.opensymphony.xwork.ActionSupport;

public class CookieAction extends ActionSupport
{
    protected WebCookies webcookies;
    public void setWebCookies(WebCookies webcookies)
    {
        this.webcookies = webcookies;
    }
   
   
    public WebCookies getWebCookies()
    {
        return webcookies;
    }
   
}
 
Xwork的配置如下,可以根据自己的需求改动,我是所有action都截取cookie
 
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
 <include file="webwork-default.xml"/>
 
 <package name="helloWorld" extends="webwork-default">

     <interceptors>
      <interceptor name="webCookiesInterceptor" class="com.cnscud.util.interceptor.WebCookiesInterceptor" />
            <interceptor-stack name="cookieStatck">
                <interceptor-ref name="webCookiesInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
     </interceptors>
  <default-interceptor-ref name="cookieStatck" />
     <action name="startCookie" class="test.StartAction">
      <result name="success" type="dispatcher">
    <param name="location">/start.jsp</param>
   </result>
     </action>
     
     <action name="resultCookie" class="test.ResultAction">
      <result name="success" type="dispatcher">
    <param name="location">/result.jsp</param>
   </result>
     </action>
 </package>
 
   
   
</xwork>
 
result的页面:
 
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="webwork" prefix="ww" %>
<html>
  <head>   
    <title>My JSP 'result.jsp' result page</title>   
  </head>
 
  <body>
  cookie Hello:
  <ww:property   value="webCookies.cookieMap['Hello'].value" />
  <br><br>
   Cookie Hello2:
  <ww:property   value="webCookies.cookieMap.Hello2.value" />
  <br><br>
  testValue:<ww:property   value="testValue" />
  <br><br>
  </body>
</html>

ResultAction代码如下:
 
package test;

import javax.servlet.http.Cookie;

public class ResultAction extends CookieAction
{
   
    private String testValue;
   
    public String execute() throws Exception
    {
        //for test
        Cookie[] cs = webcookies.getCookies();     
       
       
       
        return SUCCESS;
    }
   
    public void setTestValue(String testValue)
    {
        this.testValue = testValue;
    }
   
    public String getTestValue()
    {
        return testValue;
    }
   
}



StartAction的代码如下


package test;
import javax.servlet.http.Cookie;

public class StartAction extends CookieAction
{  
    public String execute() throws Exception
    {
       
        Cookie ack = new Cookie("Hello","World222");
       
        webcookies.addCookie(ack);
       
        return SUCCESS;
    }
   
   
   
}

WEBWORK:我写的webwork2中的cookie拦截器

我写的webwork2中的cookie拦截器作者:jscud转载文章,转载自:http://www.jscud.com/srun/news/viewhtml/4_2005_1/17.htmwebwor...
  • meanson
  • meanson
  • 2006年11月26日 18:08
  • 866

spring mvc 用cookie和拦截器实现自动登录(/免登录)

Cookie/Session机制详解:http://blog.csdn.net/fangaoxin/article/details/6952954 SpringMVC记住密码功能:http://blo...
  • eunyeon
  • eunyeon
  • 2016年10月22日 14:25
  • 7171

Retrofit 中设置 OkHttp 拦截器,保存和添加 Cookie

整理一下 Retrofit 使用过程中给 OkHttp设置拦截器,并且在请求体中添加用户登录生成的 Cookie 来确认当前用户。之前设置拦截器一般是用来添加公共的请求头,要求比较单一,只需要加进去就...
  • lv_fq
  • lv_fq
  • 2017年08月13日 00:37
  • 1379

WebWork2和Spring MVC Framework的比较

http://daihaixiang.blog.163.com/blog/static/3830134200711411515336/ WebWork2和Spring MVC Frame...
  • bluejoe2000
  • bluejoe2000
  • 2014年09月09日 15:48
  • 1872

WebWork2教程(中文版)(2)

2、建立Web应用程序 (1)这里假设你安装了Servlet容器,并知道如何创建一个Web应用程序;如果你不知道,建议学习Apache Tomcat(Apache Jakarta项目中的一个免费Se...
  • JasonSeaver
  • JasonSeaver
  • 2004年07月23日 16:06
  • 787

拒绝Cookie信息的四种方法

来源:http://it.sohu.com/webcourse/webmonkey/1web1/cookie/index.htmlCookie是一个特殊的文本文件,它是由Web服务器保存在用户自己的硬...
  • Opossum
  • Opossum
  • 2006年09月29日 09:18
  • 3008

本地HTMLajax跨域请求携带cookie数据,请求不会被登录拦截器拦截

问题描述: 由于本地的html文件想要向服务器发送请求,发送登录请求后,后台返回登录成功并实现页面跳转。看似成功之后,新页面再向服务器发送请求,却被服务器登录拦截器拦截,返回数据为用户未登录 原因...
  • Gunc_
  • Gunc_
  • 2017年09月19日 20:22
  • 209

webwork主要配置(二)

 xwork.xmlPackage(包)Packages是把Actions, Results, Result Types, Interceptors和Stacks分组成逻辑单元的一种方式,以分享一些共...
  • yehell
  • yehell
  • 2008年01月08日 15:36
  • 1421

WebWork2与SpringFramework集成之实例篇(原创)(5-1)

5、实现表单交互(1)辅助Action:PriceIncreaseFormpackage web; import org.apache.commons.logging.Log;import org.a...
  • herongxin
  • herongxin
  • 2006年01月07日 14:02
  • 618

WebWork2与SpringFramework集成之实例篇(原创)(5-2)

(4)表单处理Action:PriceIncreaseFormActionpackage web; import org.apache.commons.logging.Log;import org.a...
  • herongxin
  • herongxin
  • 2006年01月07日 14:03
  • 581
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我的webwork2的cookie拦截器
举报原因:
原因补充:

(最多只允许输入30个字)