2010-12-13 28 views

回答

1

我設法用包裝與response.current.set(new CookieLessResponseWrapper(response.current()))包裝響應。適合我。

如果有人感興趣,以下是Response包裝的代碼。

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 2010-12-13 16:09:48

0

有想法,該會議是一個Cookie。我不相信你可以刪除它。

2

我找到了this解決方法,當谷歌搜索這個問題。它的功能與您嘗試使用的一樣簡單,刪除了Cookie映射,但是它使用@Finally註釋的方法完成。

我相信餅乾地圖是在render()之後填寫的,但在任何@Finally註解類之前。

積分亞歷克斯·賈維斯在谷歌網上論壇,代碼被複制以供參考:

/** 
* 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)