Skip to content

Instantly share code, notes, and snippets.

@erichelgeson
Last active July 18, 2017 17:01
Show Gist options
  • Save erichelgeson/03e3dd6c49ffb574b13d41168eb6a9fd to your computer and use it in GitHub Desktop.
Save erichelgeson/03e3dd6c49ffb574b13d41168eb6a9fd to your computer and use it in GitHub Desktop.
Filter to add SameSite to SESSION cookies in grails/boot
package web.http
import groovy.transform.CompileStatic
import org.springframework.web.filter.GenericFilterBean
import javax.servlet.FilterChain
import javax.servlet.ServletException
import javax.servlet.ServletRequest
import javax.servlet.ServletResponse
import javax.servlet.http.Cookie
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
@CompileStatic
class SameSiteCookieFilter extends GenericFilterBean {
protected String sameSiteValue = 'Strict'
protected String cookieName = 'SESSION'
void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req
HttpServletResponse response = (HttpServletResponse) res
request.cookies.each { Cookie ck ->
if (cookieName == ck.name) {
String value
value = "${ck.name}=${ck.value}"
value += ";domain=${ck.domain ?: "localhost"}"
value += ";Path=${ck.path ?: "/"}"
if(ck.httpOnly)
value += ";HTTPOnly"
if(ck.secure)
value += ";Secure"
if(ck.comment)
value += ";Comment=${ck.comment}"
if(ck.maxAge)
value +=";Max-Age=${ck.maxAge}"
if(sameSiteValue)
value += ";SameSite=${sameSiteValue}"
response.setHeader("Set-Cookie", value)
}
}
chain.doFilter(request, response);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment