TokenBasedCookie.java
package cn.home1.oss.lib.webmvc.api;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class TokenBasedCookie<T> implements TypeSafeCookie<T> {
private final DomainResolver domainResolver;
private final Boolean httpOnly;
private final int maxAge;
private final String name;
private final Boolean secure;
private final TypeSafeToken<T> token;
public TokenBasedCookie( //
final DomainResolver domainResolver, //
final Boolean httpOnly, //
final int maxAge, //
final String name, //
final Boolean secure, //
final TypeSafeToken<T> token //
) {
this.domainResolver = domainResolver;
this.httpOnly = httpOnly;
this.maxAge = maxAge;
this.name = name;
this.secure = secure;
this.token = token;
}
// --------------------
@Override
public void clearCookie(final HttpServletRequest request, final HttpServletResponse response) {
final String domain = this.domainResolver.resolveDomain(request);
final Cookie cookie = TypeSafeCookie.buildCookie(domain, this.httpOnly, null, this.name, this.secure, null);
response.addCookie(cookie);
}
@Override
public T getCookie(final HttpServletRequest request) {
final String token = this.getValue(request);
return this.token.fromToken(token);
}
@Override
public String getValue(final HttpServletRequest request) {
final Cookie cookie = TypeSafeCookie.findCookie(request, this.name);
if (log.isTraceEnabled()) {
log.trace("getValue cookie name: {}, cookie: {}", this.name, cookie);
}
return cookie != null ? cookie.getValue() : null;
}
@Override
public T setCookie( //
final HttpServletRequest request, //
final HttpServletResponse response, //
final T obj //
) {
final String token = this.token.toToken(obj);
final String domain = this.domainResolver.resolveDomain(request);
final Cookie cookie = TypeSafeCookie.buildCookie(domain, this.httpOnly, this.maxAge, this.name, this.secure, token);
response.addCookie(cookie);
return obj;
}
}