Struts 2 must have full featured cookie utils out of the box. I saw the
current CookieInterceptor, but it's insufficient.
Needed methods (Cookie is javax.servlet.http.Cookie):
1) Map<String, Cookie> getCookies(); // where key - cookie name
2) String getCookie(String cookieName);
3) setCookie(String cookieName, Cookie cookie); // or "addCookie(...)"
4) removeCookie(String cookieName);
I suppose this feature can be implemented either as Interceptor or as Util
class.
//-----------------------------------------------------------------------------
1) Implementing as Interceptor:
interface CookiesAware {
void setCookies(Map<String, Cookie> cookies);
// Helpers - methods that return Sets of cookies to be set/remove
// to/from response. Or these methods can be replaced by custom
// CookieHashMap that overrides "put", "putAll", "remove" and "clear"
// to set/remove cookies to/from response.
Set<Cookie> getCookiesToSet();
Set<String> getCookiesToRemove();
}
class CookiesInterceptor {
public String intercept(ActionInvocation actionInvocation) {
Object action = actionInvocation.getAction();
CookiesAware cookiesAware = null;
if (action instanceof CookiesAware)
{
HttpServletRequest request =
ServletActionContext.getRequest();
Map<String, Cookie> cookies = new HashMap<String,
Cookie>();
for (Cookie cookie : request.getCookies()) {
cookies.put(cookie.getName(), cookie);
}
cookiesAware = (CookiesAware) action;
cookiesAware.setCookies(cookies);
}
String actionResult = actionInvocation.invoke();
if (cookiesAware != null) {
HttpServletResponse response =
ServletActionContext.getResponse();
Set<Cookie> cookiesToSet =
cookiesAware.getCookiesToSet();
if (cookiesToSet != null)
for (Cookie cookie : cookiesToSet) {
response.addCookie(cookie);
}
}
Set<String> cookiesToRemove =
cookiesAware.getCookiesToRemove();
if (cookiesToRemove != null) {
for (String cookieName : cookiesToRemove) {
Cookie cookie = new Cookie(cookieName,
"");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
return actionResult;
}
}
//-----------------------------------------------------------------------------
2) Implementing as Utility class:
// Use code from CookiesInterceptor
class abstract CookieUtils {
public static Map<String, Cookie> getCookies() {...}
public static String getCookie(String cookieName) {...}
public static void setCookie(String cookieName, Cookie cookie) {...}
public static void removeCookie(String cookieName) {...}
}
--
View this message in context:
http://www.nabble.com/Full-featured-cookie-utils-out-of-the-box-tp25145716p25145716.html
Sent from the Struts - Dev mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]