2010-12-13 25 views

答えて

1

response.current.set(new CookieLessResponseWrapper(response.current()))というラッパーで応答をラップすることができました。私のために働きます。

ここには、誰かが興味を持っている場合のレスポンスラッパーのコードがあります。

package helpers; 

import play.mvc.Http.Response; 

public class CookieLessResponseWrapper extends Response { 
    private Response wrappedResponse; 

    public CookieLessResponseWrapper(Response response) { 
     this.wrappedResponse = response; 
    } 

    @Override 
    public void accessControl(String allowOrigin, boolean allowCredentials) { 
     wrappedResponse.accessControl(allowOrigin, allowCredentials); 
    } 

    @Override 
    public void accessControl(String allowOrigin, String allowMethods, 
      boolean allowCredentials) { 
     wrappedResponse.accessControl(allowOrigin, allowMethods, allowCredentials); 
    } 

    @Override 
    public void accessControl(String allowOrigin) { 
     wrappedResponse.accessControl(allowOrigin); 
    } 

    @Override 
    public void cacheFor(String etag, String duration, long lastModified) { 
     wrappedResponse.cacheFor(etag, duration, lastModified); 
    } 

    @Override 
    public void cacheFor(String duration) { 
     wrappedResponse.cacheFor(duration); 
    } 

    @Override 
    public String getHeader(String name) { 
     return wrappedResponse.getHeader(name); 
    } 

    @Override 
    public void print(Object o) { 
     wrappedResponse.print(o); 
    } 

    @Override 
    public void removeCookie(String name) { 
     wrappedResponse.removeCookie(name); 
    } 

    @Override 
    public void reset() { 
     wrappedResponse.reset(); 
    } 

    @Override 
    public void setContentTypeIfNotSet(String contentType) { 
     wrappedResponse.setContentTypeIfNotSet(contentType); 
    } 

    @Override 
    public void setCookie(String name, String value, String domain, 
      String path, Integer maxAge, boolean secure, boolean httpOnly) { 
    } 

    @Override 
    public void setCookie(String name, String value, String domain, 
      String path, Integer maxAge, boolean secure) { 
    } 

    @Override 
    public void setCookie(String name, String value, String duration) { 
    } 

    @Override 
    public void setCookie(String name, String value) { 
    } 

    @Override 
    public void setHeader(String name, String value) { 
     wrappedResponse.setHeader(name, value); 
    } 

} 
0

あなたはで、あなたのアクションでは、すべてのヘッダーをクリアすることができるはずです。

Http.Response.current().reset(); 
+0

セッション全体を破棄することに動作するようには思えません。 reset()は本体をクリアするためのものです(out.clear())。 – magbyr

0

セッションはクッキーであると考えています。私はあなたがそれを取り除くことができるとは思わない。

2

私はこの問題をGoogleで検出したときに解決策を見つけました:thisクッキーマップを削除するのと同じように試みますが、@Finallyという注釈が付けられた方法で行われます。

の後、@Finally注釈付きクラスの前にクッキーマップが埋め込まれていると思います。 Googleグループのアレックス・ジャービスへ

クレジットは、コードは参考のためにコピーされます。

/** 
* Removes cookies from all responses. 
* 
* This is because cookies are not required in stateless webservice and 
* we don't want to send any unnecessary information to the client. 
* 
* @author Alex Jarvis 
*/ 
public class NoCookieFilter extends Controller { 

     /** An empty cookie map to replace any cookies in the response. */ 
     private static final Map<String, Http.Cookie> cookies = new HashMap<String, Http.Cookie>(0); 

     /** 
     * When the configuration property 'cookies.enabled' equals false, 
     * this Finally filter will replace the cookies in the response with an empty Map. 
     */ 

     @Finally 
     protected static void removeCookies() { 
      boolean cookiesEnabled = Boolean.parseBoolean(Play.configuration.getProperty("cookies.enabled")); 
      if (!cookiesEnabled) { 
        response.cookies = cookies; 
      } 
     } 

} 

使用法:あなたは "Cookieなし" は

@With(NoCookieFilterでそれに注釈を付けるようにしたい任意のコントローラの場合.classファイル)

(プレイ1.2.5でテスト済み)

関連する問題