<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.web.servlet;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.owasp.encoder.Encode;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.slf4j.Logger;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">025</span><a id="line.25"></a>
<span class="sourceLineNo">026</span><a id="line.26">import javax.servlet.http.HttpServletRequest;</a>
<span class="sourceLineNo">027</span><a id="line.27">import javax.servlet.http.HttpServletResponse;</a>
<span class="sourceLineNo">028</span><a id="line.28">import java.text.DateFormat;</a>
<span class="sourceLineNo">029</span><a id="line.29">import java.text.SimpleDateFormat;</a>
<span class="sourceLineNo">030</span><a id="line.30">import java.util.Calendar;</a>
<span class="sourceLineNo">031</span><a id="line.31">import java.util.Date;</a>
<span class="sourceLineNo">032</span><a id="line.32">import java.util.Locale;</a>
<span class="sourceLineNo">033</span><a id="line.33">import java.util.TimeZone;</a>
<span class="sourceLineNo">034</span><a id="line.34"></a>
<span class="sourceLineNo">035</span><a id="line.35">/**</a>
<span class="sourceLineNo">036</span><a id="line.36"> * Default {@link Cookie Cookie} implementation.  'HttpOnly' is supported out of the box, even on</a>
<span class="sourceLineNo">037</span><a id="line.37"> * Servlet {@code 2.4} and {@code 2.5} container implementations, using raw header writing logic and not</a>
<span class="sourceLineNo">038</span><a id="line.38"> * {@link javax.servlet.http.Cookie javax.servlet.http.Cookie} objects (which only has 'HttpOnly' support in Servlet</a>
<span class="sourceLineNo">039</span><a id="line.39"> * {@code 2.6} specifications and above).</a>
<span class="sourceLineNo">040</span><a id="line.40"> *</a>
<span class="sourceLineNo">041</span><a id="line.41"> * @since 1.0</a>
<span class="sourceLineNo">042</span><a id="line.42"> */</a>
<span class="sourceLineNo">043</span><a id="line.43">public class SimpleCookie implements Cookie {</a>
<span class="sourceLineNo">044</span><a id="line.44"></a>
<span class="sourceLineNo">045</span><a id="line.45">    /**</a>
<span class="sourceLineNo">046</span><a id="line.46">     * {@code -1}, indicating the cookie should expire when the browser closes.</a>
<span class="sourceLineNo">047</span><a id="line.47">     */</a>
<span class="sourceLineNo">048</span><a id="line.48">    public static final int DEFAULT_MAX_AGE = -1;</a>
<span class="sourceLineNo">049</span><a id="line.49"></a>
<span class="sourceLineNo">050</span><a id="line.50">    /**</a>
<span class="sourceLineNo">051</span><a id="line.51">     * {@code -1} indicating that no version property should be set on the cookie.</a>
<span class="sourceLineNo">052</span><a id="line.52">     */</a>
<span class="sourceLineNo">053</span><a id="line.53">    public static final int DEFAULT_VERSION = -1;</a>
<span class="sourceLineNo">054</span><a id="line.54"></a>
<span class="sourceLineNo">055</span><a id="line.55">    //These constants are protected on purpose so that the test case can use them</a>
<span class="sourceLineNo">056</span><a id="line.56">    protected static final String NAME_VALUE_DELIMITER = "=";</a>
<span class="sourceLineNo">057</span><a id="line.57">    protected static final String ATTRIBUTE_DELIMITER = "; ";</a>
<span class="sourceLineNo">058</span><a id="line.58">    protected static final long DAY_MILLIS = 86400000; //1 day = 86,400,000 milliseconds</a>
<span class="sourceLineNo">059</span><a id="line.59">    protected static final String GMT_TIME_ZONE_ID = "GMT";</a>
<span class="sourceLineNo">060</span><a id="line.60">    protected static final String COOKIE_DATE_FORMAT_STRING = "EEE, dd-MMM-yyyy HH:mm:ss z";</a>
<span class="sourceLineNo">061</span><a id="line.61"></a>
<span class="sourceLineNo">062</span><a id="line.62">    protected static final String COOKIE_HEADER_NAME = "Set-Cookie";</a>
<span class="sourceLineNo">063</span><a id="line.63">    protected static final String PATH_ATTRIBUTE_NAME = "Path";</a>
<span class="sourceLineNo">064</span><a id="line.64">    protected static final String EXPIRES_ATTRIBUTE_NAME = "Expires";</a>
<span class="sourceLineNo">065</span><a id="line.65">    protected static final String MAXAGE_ATTRIBUTE_NAME = "Max-Age";</a>
<span class="sourceLineNo">066</span><a id="line.66">    protected static final String DOMAIN_ATTRIBUTE_NAME = "Domain";</a>
<span class="sourceLineNo">067</span><a id="line.67">    protected static final String VERSION_ATTRIBUTE_NAME = "Version";</a>
<span class="sourceLineNo">068</span><a id="line.68">    protected static final String COMMENT_ATTRIBUTE_NAME = "Comment";</a>
<span class="sourceLineNo">069</span><a id="line.69">    protected static final String SECURE_ATTRIBUTE_NAME = "Secure";</a>
<span class="sourceLineNo">070</span><a id="line.70">    protected static final String HTTP_ONLY_ATTRIBUTE_NAME = "HttpOnly";</a>
<span class="sourceLineNo">071</span><a id="line.71">    protected static final String SAME_SITE_ATTRIBUTE_NAME = "SameSite";</a>
<span class="sourceLineNo">072</span><a id="line.72"></a>
<span class="sourceLineNo">073</span><a id="line.73">    private static final transient Logger log = LoggerFactory.getLogger(SimpleCookie.class);</a>
<span class="sourceLineNo">074</span><a id="line.74"></a>
<span class="sourceLineNo">075</span><a id="line.75">    private String name;</a>
<span class="sourceLineNo">076</span><a id="line.76">    private String value;</a>
<span class="sourceLineNo">077</span><a id="line.77">    private String comment;</a>
<span class="sourceLineNo">078</span><a id="line.78">    private String domain;</a>
<span class="sourceLineNo">079</span><a id="line.79">    private String path;</a>
<span class="sourceLineNo">080</span><a id="line.80">    private int maxAge;</a>
<span class="sourceLineNo">081</span><a id="line.81">    private int version;</a>
<span class="sourceLineNo">082</span><a id="line.82">    private boolean secure;</a>
<span class="sourceLineNo">083</span><a id="line.83">    private boolean httpOnly;</a>
<span class="sourceLineNo">084</span><a id="line.84">    private SameSiteOptions sameSite;</a>
<span class="sourceLineNo">085</span><a id="line.85"></a>
<span class="sourceLineNo">086</span><a id="line.86">    public SimpleCookie() {</a>
<span class="sourceLineNo">087</span><a id="line.87">        this.maxAge = DEFAULT_MAX_AGE;</a>
<span class="sourceLineNo">088</span><a id="line.88">        this.version = DEFAULT_VERSION;</a>
<span class="sourceLineNo">089</span><a id="line.89">        this.httpOnly = true; //most of the cookies ever used by Shiro should be as secure as possible.</a>
<span class="sourceLineNo">090</span><a id="line.90">        this.sameSite = SameSiteOptions.LAX;</a>
<span class="sourceLineNo">091</span><a id="line.91">    }</a>
<span class="sourceLineNo">092</span><a id="line.92"></a>
<span class="sourceLineNo">093</span><a id="line.93">    public SimpleCookie(String name) {</a>
<span class="sourceLineNo">094</span><a id="line.94">        this();</a>
<span class="sourceLineNo">095</span><a id="line.95">        this.name = name;</a>
<span class="sourceLineNo">096</span><a id="line.96">    }</a>
<span class="sourceLineNo">097</span><a id="line.97"></a>
<span class="sourceLineNo">098</span><a id="line.98">    public SimpleCookie(Cookie cookie) {</a>
<span class="sourceLineNo">099</span><a id="line.99">        this.name = cookie.getName();</a>
<span class="sourceLineNo">100</span><a id="line.100">        this.value = cookie.getValue();</a>
<span class="sourceLineNo">101</span><a id="line.101">        this.comment = cookie.getComment();</a>
<span class="sourceLineNo">102</span><a id="line.102">        this.domain = cookie.getDomain();</a>
<span class="sourceLineNo">103</span><a id="line.103">        this.path = cookie.getPath();</a>
<span class="sourceLineNo">104</span><a id="line.104">        this.maxAge = Math.max(DEFAULT_MAX_AGE, cookie.getMaxAge());</a>
<span class="sourceLineNo">105</span><a id="line.105">        this.version = Math.max(DEFAULT_VERSION, cookie.getVersion());</a>
<span class="sourceLineNo">106</span><a id="line.106">        this.secure = cookie.isSecure();</a>
<span class="sourceLineNo">107</span><a id="line.107">        this.httpOnly = cookie.isHttpOnly();</a>
<span class="sourceLineNo">108</span><a id="line.108">        this.sameSite = cookie.getSameSite();</a>
<span class="sourceLineNo">109</span><a id="line.109">    }</a>
<span class="sourceLineNo">110</span><a id="line.110"></a>
<span class="sourceLineNo">111</span><a id="line.111">    @Override</a>
<span class="sourceLineNo">112</span><a id="line.112">    public String getName() {</a>
<span class="sourceLineNo">113</span><a id="line.113">        return name;</a>
<span class="sourceLineNo">114</span><a id="line.114">    }</a>
<span class="sourceLineNo">115</span><a id="line.115"></a>
<span class="sourceLineNo">116</span><a id="line.116">    @Override</a>
<span class="sourceLineNo">117</span><a id="line.117">    public void setName(String name) {</a>
<span class="sourceLineNo">118</span><a id="line.118">        if (!StringUtils.hasText(name)) {</a>
<span class="sourceLineNo">119</span><a id="line.119">            throw new IllegalArgumentException("Name cannot be null/empty.");</a>
<span class="sourceLineNo">120</span><a id="line.120">        }</a>
<span class="sourceLineNo">121</span><a id="line.121">        this.name = name;</a>
<span class="sourceLineNo">122</span><a id="line.122">    }</a>
<span class="sourceLineNo">123</span><a id="line.123"></a>
<span class="sourceLineNo">124</span><a id="line.124">    @Override</a>
<span class="sourceLineNo">125</span><a id="line.125">    public String getValue() {</a>
<span class="sourceLineNo">126</span><a id="line.126">        return value;</a>
<span class="sourceLineNo">127</span><a id="line.127">    }</a>
<span class="sourceLineNo">128</span><a id="line.128"></a>
<span class="sourceLineNo">129</span><a id="line.129">    @Override</a>
<span class="sourceLineNo">130</span><a id="line.130">    public void setValue(String value) {</a>
<span class="sourceLineNo">131</span><a id="line.131">        this.value = value;</a>
<span class="sourceLineNo">132</span><a id="line.132">    }</a>
<span class="sourceLineNo">133</span><a id="line.133"></a>
<span class="sourceLineNo">134</span><a id="line.134">    @Override</a>
<span class="sourceLineNo">135</span><a id="line.135">    public String getComment() {</a>
<span class="sourceLineNo">136</span><a id="line.136">        return comment;</a>
<span class="sourceLineNo">137</span><a id="line.137">    }</a>
<span class="sourceLineNo">138</span><a id="line.138"></a>
<span class="sourceLineNo">139</span><a id="line.139">    @Override</a>
<span class="sourceLineNo">140</span><a id="line.140">    public void setComment(String comment) {</a>
<span class="sourceLineNo">141</span><a id="line.141">        this.comment = comment;</a>
<span class="sourceLineNo">142</span><a id="line.142">    }</a>
<span class="sourceLineNo">143</span><a id="line.143"></a>
<span class="sourceLineNo">144</span><a id="line.144">    @Override</a>
<span class="sourceLineNo">145</span><a id="line.145">    public String getDomain() {</a>
<span class="sourceLineNo">146</span><a id="line.146">        return domain;</a>
<span class="sourceLineNo">147</span><a id="line.147">    }</a>
<span class="sourceLineNo">148</span><a id="line.148"></a>
<span class="sourceLineNo">149</span><a id="line.149">    @Override</a>
<span class="sourceLineNo">150</span><a id="line.150">    public void setDomain(String domain) {</a>
<span class="sourceLineNo">151</span><a id="line.151">        this.domain = domain;</a>
<span class="sourceLineNo">152</span><a id="line.152">    }</a>
<span class="sourceLineNo">153</span><a id="line.153"></a>
<span class="sourceLineNo">154</span><a id="line.154">    @Override</a>
<span class="sourceLineNo">155</span><a id="line.155">    public String getPath() {</a>
<span class="sourceLineNo">156</span><a id="line.156">        return path;</a>
<span class="sourceLineNo">157</span><a id="line.157">    }</a>
<span class="sourceLineNo">158</span><a id="line.158"></a>
<span class="sourceLineNo">159</span><a id="line.159">    @Override</a>
<span class="sourceLineNo">160</span><a id="line.160">    public void setPath(String path) {</a>
<span class="sourceLineNo">161</span><a id="line.161">        this.path = path;</a>
<span class="sourceLineNo">162</span><a id="line.162">    }</a>
<span class="sourceLineNo">163</span><a id="line.163"></a>
<span class="sourceLineNo">164</span><a id="line.164">    @Override</a>
<span class="sourceLineNo">165</span><a id="line.165">    public int getMaxAge() {</a>
<span class="sourceLineNo">166</span><a id="line.166">        return maxAge;</a>
<span class="sourceLineNo">167</span><a id="line.167">    }</a>
<span class="sourceLineNo">168</span><a id="line.168"></a>
<span class="sourceLineNo">169</span><a id="line.169">    @Override</a>
<span class="sourceLineNo">170</span><a id="line.170">    public void setMaxAge(int maxAge) {</a>
<span class="sourceLineNo">171</span><a id="line.171">        this.maxAge = Math.max(DEFAULT_MAX_AGE, maxAge);</a>
<span class="sourceLineNo">172</span><a id="line.172">    }</a>
<span class="sourceLineNo">173</span><a id="line.173"></a>
<span class="sourceLineNo">174</span><a id="line.174">    @Override</a>
<span class="sourceLineNo">175</span><a id="line.175">    public int getVersion() {</a>
<span class="sourceLineNo">176</span><a id="line.176">        return version;</a>
<span class="sourceLineNo">177</span><a id="line.177">    }</a>
<span class="sourceLineNo">178</span><a id="line.178"></a>
<span class="sourceLineNo">179</span><a id="line.179">    @Override</a>
<span class="sourceLineNo">180</span><a id="line.180">    public void setVersion(int version) {</a>
<span class="sourceLineNo">181</span><a id="line.181">        this.version = Math.max(DEFAULT_VERSION, version);</a>
<span class="sourceLineNo">182</span><a id="line.182">    }</a>
<span class="sourceLineNo">183</span><a id="line.183"></a>
<span class="sourceLineNo">184</span><a id="line.184">    @Override</a>
<span class="sourceLineNo">185</span><a id="line.185">    public boolean isSecure() {</a>
<span class="sourceLineNo">186</span><a id="line.186">        return secure;</a>
<span class="sourceLineNo">187</span><a id="line.187">    }</a>
<span class="sourceLineNo">188</span><a id="line.188"></a>
<span class="sourceLineNo">189</span><a id="line.189">    @Override</a>
<span class="sourceLineNo">190</span><a id="line.190">    public void setSecure(boolean secure) {</a>
<span class="sourceLineNo">191</span><a id="line.191">        this.secure = secure;</a>
<span class="sourceLineNo">192</span><a id="line.192">    }</a>
<span class="sourceLineNo">193</span><a id="line.193"></a>
<span class="sourceLineNo">194</span><a id="line.194">    @Override</a>
<span class="sourceLineNo">195</span><a id="line.195">    public boolean isHttpOnly() {</a>
<span class="sourceLineNo">196</span><a id="line.196">        return httpOnly;</a>
<span class="sourceLineNo">197</span><a id="line.197">    }</a>
<span class="sourceLineNo">198</span><a id="line.198"></a>
<span class="sourceLineNo">199</span><a id="line.199">    @Override</a>
<span class="sourceLineNo">200</span><a id="line.200">    public void setHttpOnly(boolean httpOnly) {</a>
<span class="sourceLineNo">201</span><a id="line.201">        this.httpOnly = httpOnly;</a>
<span class="sourceLineNo">202</span><a id="line.202">    }</a>
<span class="sourceLineNo">203</span><a id="line.203"></a>
<span class="sourceLineNo">204</span><a id="line.204">    @Override</a>
<span class="sourceLineNo">205</span><a id="line.205">    public SameSiteOptions getSameSite() {</a>
<span class="sourceLineNo">206</span><a id="line.206">        return sameSite;</a>
<span class="sourceLineNo">207</span><a id="line.207">    }</a>
<span class="sourceLineNo">208</span><a id="line.208"></a>
<span class="sourceLineNo">209</span><a id="line.209">    @Override</a>
<span class="sourceLineNo">210</span><a id="line.210">    public void setSameSite(SameSiteOptions sameSite) {</a>
<span class="sourceLineNo">211</span><a id="line.211">        this.sameSite = sameSite;</a>
<span class="sourceLineNo">212</span><a id="line.212">        if (this.sameSite == SameSiteOptions.NONE) {</a>
<span class="sourceLineNo">213</span><a id="line.213">            // do not allow invalid cookies. Only secure cookies are allowed if SameSite is set to NONE.</a>
<span class="sourceLineNo">214</span><a id="line.214">            setSecure(true);</a>
<span class="sourceLineNo">215</span><a id="line.215">        }</a>
<span class="sourceLineNo">216</span><a id="line.216">    }</a>
<span class="sourceLineNo">217</span><a id="line.217"></a>
<span class="sourceLineNo">218</span><a id="line.218">    /**</a>
<span class="sourceLineNo">219</span><a id="line.219">     * Returns the Cookie's calculated path setting.  If the {@link javax.servlet.http.Cookie#getPath() path} is {@code null}, then the</a>
<span class="sourceLineNo">220</span><a id="line.220">     * {@code request}'s {@link javax.servlet.http.HttpServletRequest#getContextPath() context path}</a>
<span class="sourceLineNo">221</span><a id="line.221">     * will be returned. If getContextPath() is the empty string or null then the ROOT_PATH constant is returned.</a>
<span class="sourceLineNo">222</span><a id="line.222">     *</a>
<span class="sourceLineNo">223</span><a id="line.223">     * @param request the incoming HttpServletRequest</a>
<span class="sourceLineNo">224</span><a id="line.224">     * @return the path to be used as the path when the cookie is created or removed</a>
<span class="sourceLineNo">225</span><a id="line.225">     */</a>
<span class="sourceLineNo">226</span><a id="line.226">    private String calculatePath(HttpServletRequest request) {</a>
<span class="sourceLineNo">227</span><a id="line.227">        String path = StringUtils.clean(getPath());</a>
<span class="sourceLineNo">228</span><a id="line.228">        if (!StringUtils.hasText(path)) {</a>
<span class="sourceLineNo">229</span><a id="line.229">            path = StringUtils.clean(request.getContextPath());</a>
<span class="sourceLineNo">230</span><a id="line.230">        }</a>
<span class="sourceLineNo">231</span><a id="line.231"></a>
<span class="sourceLineNo">232</span><a id="line.232">        //fix for http://issues.apache.org/jira/browse/SHIRO-9:</a>
<span class="sourceLineNo">233</span><a id="line.233">        if (path == null) {</a>
<span class="sourceLineNo">234</span><a id="line.234">            path = ROOT_PATH;</a>
<span class="sourceLineNo">235</span><a id="line.235">        }</a>
<span class="sourceLineNo">236</span><a id="line.236">        log.trace("calculated path: {}", path);</a>
<span class="sourceLineNo">237</span><a id="line.237">        return path;</a>
<span class="sourceLineNo">238</span><a id="line.238">    }</a>
<span class="sourceLineNo">239</span><a id="line.239"></a>
<span class="sourceLineNo">240</span><a id="line.240">    @Override</a>
<span class="sourceLineNo">241</span><a id="line.241">    public void saveTo(HttpServletRequest request, HttpServletResponse response) {</a>
<span class="sourceLineNo">242</span><a id="line.242"></a>
<span class="sourceLineNo">243</span><a id="line.243">        String name = getName();</a>
<span class="sourceLineNo">244</span><a id="line.244">        String value = getValue();</a>
<span class="sourceLineNo">245</span><a id="line.245">        String comment = getComment();</a>
<span class="sourceLineNo">246</span><a id="line.246">        String domain = getDomain();</a>
<span class="sourceLineNo">247</span><a id="line.247">        String path = calculatePath(request);</a>
<span class="sourceLineNo">248</span><a id="line.248">        int maxAge = getMaxAge();</a>
<span class="sourceLineNo">249</span><a id="line.249">        int version = getVersion();</a>
<span class="sourceLineNo">250</span><a id="line.250">        boolean secure = isSecure();</a>
<span class="sourceLineNo">251</span><a id="line.251">        boolean httpOnly = isHttpOnly();</a>
<span class="sourceLineNo">252</span><a id="line.252">        SameSiteOptions sameSite = getSameSite();</a>
<span class="sourceLineNo">253</span><a id="line.253"></a>
<span class="sourceLineNo">254</span><a id="line.254">        addCookieHeader(response, name, value, comment, domain, path, maxAge, version, secure, httpOnly, sameSite);</a>
<span class="sourceLineNo">255</span><a id="line.255">    }</a>
<span class="sourceLineNo">256</span><a id="line.256"></a>
<span class="sourceLineNo">257</span><a id="line.257">    private void addCookieHeader(HttpServletResponse response, String name, String value, String comment,</a>
<span class="sourceLineNo">258</span><a id="line.258">                                 String domain, String path, int maxAge, int version,</a>
<span class="sourceLineNo">259</span><a id="line.259">                                 boolean secure, boolean httpOnly, SameSiteOptions sameSite) {</a>
<span class="sourceLineNo">260</span><a id="line.260"></a>
<span class="sourceLineNo">261</span><a id="line.261">        String headerValue = buildHeaderValue(name, value, comment, domain, path, maxAge, version, secure, httpOnly, sameSite);</a>
<span class="sourceLineNo">262</span><a id="line.262">        response.addHeader(COOKIE_HEADER_NAME, headerValue);</a>
<span class="sourceLineNo">263</span><a id="line.263"></a>
<span class="sourceLineNo">264</span><a id="line.264">        if (log.isDebugEnabled()) {</a>
<span class="sourceLineNo">265</span><a id="line.265">            log.debug("Added HttpServletResponse Cookie [{}]", headerValue);</a>
<span class="sourceLineNo">266</span><a id="line.266">        }</a>
<span class="sourceLineNo">267</span><a id="line.267">    }</a>
<span class="sourceLineNo">268</span><a id="line.268"></a>
<span class="sourceLineNo">269</span><a id="line.269">    /*</a>
<span class="sourceLineNo">270</span><a id="line.270">     * This implementation followed the grammar defined here for convenience:</a>
<span class="sourceLineNo">271</span><a id="line.271">     * &lt;a href="http://github.com/abarth/http-state/blob/master/notes/2009-11-07-Yui-Naruse.txt"&gt;Cookie grammar&lt;/a&gt;.</a>
<span class="sourceLineNo">272</span><a id="line.272">     *</a>
<span class="sourceLineNo">273</span><a id="line.273">     * @return the 'Set-Cookie' header value for this cookie instance.</a>
<span class="sourceLineNo">274</span><a id="line.274">     */</a>
<span class="sourceLineNo">275</span><a id="line.275"></a>
<span class="sourceLineNo">276</span><a id="line.276">    protected String buildHeaderValue(String name, String value, String comment,</a>
<span class="sourceLineNo">277</span><a id="line.277">                                      String domain, String path, int maxAge, int version,</a>
<span class="sourceLineNo">278</span><a id="line.278">                                      boolean secure, boolean httpOnly) {</a>
<span class="sourceLineNo">279</span><a id="line.279"></a>
<span class="sourceLineNo">280</span><a id="line.280">        return buildHeaderValue(name, value, comment, domain, path, maxAge, version, secure, httpOnly, getSameSite());</a>
<span class="sourceLineNo">281</span><a id="line.281">    }</a>
<span class="sourceLineNo">282</span><a id="line.282"></a>
<span class="sourceLineNo">283</span><a id="line.283">    protected String buildHeaderValue(String name, String value, String comment,</a>
<span class="sourceLineNo">284</span><a id="line.284">                                      String domain, String path, int maxAge, int version,</a>
<span class="sourceLineNo">285</span><a id="line.285">                                      boolean secure, boolean httpOnly, SameSiteOptions sameSite) {</a>
<span class="sourceLineNo">286</span><a id="line.286"></a>
<span class="sourceLineNo">287</span><a id="line.287">        if (!StringUtils.hasText(name)) {</a>
<span class="sourceLineNo">288</span><a id="line.288">            throw new IllegalStateException("Cookie name cannot be null/empty.");</a>
<span class="sourceLineNo">289</span><a id="line.289">        }</a>
<span class="sourceLineNo">290</span><a id="line.290"></a>
<span class="sourceLineNo">291</span><a id="line.291">        StringBuilder sb = new StringBuilder(name).append(NAME_VALUE_DELIMITER);</a>
<span class="sourceLineNo">292</span><a id="line.292"></a>
<span class="sourceLineNo">293</span><a id="line.293">        if (StringUtils.hasText(value)) {</a>
<span class="sourceLineNo">294</span><a id="line.294">            sb.append(value);</a>
<span class="sourceLineNo">295</span><a id="line.295">        }</a>
<span class="sourceLineNo">296</span><a id="line.296"></a>
<span class="sourceLineNo">297</span><a id="line.297">        appendComment(sb, comment);</a>
<span class="sourceLineNo">298</span><a id="line.298">        appendDomain(sb, domain);</a>
<span class="sourceLineNo">299</span><a id="line.299">        appendPath(sb, path);</a>
<span class="sourceLineNo">300</span><a id="line.300">        appendExpires(sb, maxAge);</a>
<span class="sourceLineNo">301</span><a id="line.301">        appendVersion(sb, version);</a>
<span class="sourceLineNo">302</span><a id="line.302">        appendSecure(sb, secure);</a>
<span class="sourceLineNo">303</span><a id="line.303">        appendHttpOnly(sb, httpOnly);</a>
<span class="sourceLineNo">304</span><a id="line.304">        appendSameSite(sb, sameSite);</a>
<span class="sourceLineNo">305</span><a id="line.305"></a>
<span class="sourceLineNo">306</span><a id="line.306">        return sb.toString();</a>
<span class="sourceLineNo">307</span><a id="line.307"></a>
<span class="sourceLineNo">308</span><a id="line.308">    }</a>
<span class="sourceLineNo">309</span><a id="line.309"></a>
<span class="sourceLineNo">310</span><a id="line.310">    private void appendComment(StringBuilder sb, String comment) {</a>
<span class="sourceLineNo">311</span><a id="line.311">        if (StringUtils.hasText(comment)) {</a>
<span class="sourceLineNo">312</span><a id="line.312">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">313</span><a id="line.313">            sb.append(COMMENT_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(comment);</a>
<span class="sourceLineNo">314</span><a id="line.314">        }</a>
<span class="sourceLineNo">315</span><a id="line.315">    }</a>
<span class="sourceLineNo">316</span><a id="line.316"></a>
<span class="sourceLineNo">317</span><a id="line.317">    private void appendDomain(StringBuilder sb, String domain) {</a>
<span class="sourceLineNo">318</span><a id="line.318">        if (StringUtils.hasText(domain)) {</a>
<span class="sourceLineNo">319</span><a id="line.319">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">320</span><a id="line.320">            sb.append(DOMAIN_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(domain);</a>
<span class="sourceLineNo">321</span><a id="line.321">        }</a>
<span class="sourceLineNo">322</span><a id="line.322">    }</a>
<span class="sourceLineNo">323</span><a id="line.323"></a>
<span class="sourceLineNo">324</span><a id="line.324">    private void appendPath(StringBuilder sb, String path) {</a>
<span class="sourceLineNo">325</span><a id="line.325">        if (StringUtils.hasText(path)) {</a>
<span class="sourceLineNo">326</span><a id="line.326">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">327</span><a id="line.327">            sb.append(PATH_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(path);</a>
<span class="sourceLineNo">328</span><a id="line.328">        }</a>
<span class="sourceLineNo">329</span><a id="line.329">    }</a>
<span class="sourceLineNo">330</span><a id="line.330"></a>
<span class="sourceLineNo">331</span><a id="line.331">    private void appendExpires(StringBuilder sb, int maxAge) {</a>
<span class="sourceLineNo">332</span><a id="line.332">        // if maxAge is negative, cookie should should expire when browser closes</a>
<span class="sourceLineNo">333</span><a id="line.333">        // Don't write the maxAge cookie value if it's negative - at least on Firefox it'll cause the </a>
<span class="sourceLineNo">334</span><a id="line.334">        // cookie to be deleted immediately</a>
<span class="sourceLineNo">335</span><a id="line.335">        // Write the expires header used by older browsers, but may be unnecessary</a>
<span class="sourceLineNo">336</span><a id="line.336">        // and it is not by the spec, see http://www.faqs.org/rfcs/rfc2965.html</a>
<span class="sourceLineNo">337</span><a id="line.337">        // TODO consider completely removing the following </a>
<span class="sourceLineNo">338</span><a id="line.338">        if (maxAge &gt;= 0) {</a>
<span class="sourceLineNo">339</span><a id="line.339">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">340</span><a id="line.340">            sb.append(MAXAGE_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(maxAge);</a>
<span class="sourceLineNo">341</span><a id="line.341">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">342</span><a id="line.342">            Date expires;</a>
<span class="sourceLineNo">343</span><a id="line.343">            if (maxAge == 0) {</a>
<span class="sourceLineNo">344</span><a id="line.344">                //delete the cookie by specifying a time in the past (1 day ago):</a>
<span class="sourceLineNo">345</span><a id="line.345">                expires = new Date(System.currentTimeMillis() - DAY_MILLIS);</a>
<span class="sourceLineNo">346</span><a id="line.346">            } else {</a>
<span class="sourceLineNo">347</span><a id="line.347">                //Value is in seconds.  So take 'now' and add that many seconds, and that's our expiration date:</a>
<span class="sourceLineNo">348</span><a id="line.348">                Calendar cal = Calendar.getInstance();</a>
<span class="sourceLineNo">349</span><a id="line.349">                cal.add(Calendar.SECOND, maxAge);</a>
<span class="sourceLineNo">350</span><a id="line.350">                expires = cal.getTime();</a>
<span class="sourceLineNo">351</span><a id="line.351">            }</a>
<span class="sourceLineNo">352</span><a id="line.352">            String formatted = toCookieDate(expires);</a>
<span class="sourceLineNo">353</span><a id="line.353">            sb.append(EXPIRES_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(formatted);</a>
<span class="sourceLineNo">354</span><a id="line.354">        }</a>
<span class="sourceLineNo">355</span><a id="line.355">    }</a>
<span class="sourceLineNo">356</span><a id="line.356"></a>
<span class="sourceLineNo">357</span><a id="line.357">    private void appendVersion(StringBuilder sb, int version) {</a>
<span class="sourceLineNo">358</span><a id="line.358">        if (version &gt; DEFAULT_VERSION) {</a>
<span class="sourceLineNo">359</span><a id="line.359">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">360</span><a id="line.360">            sb.append(VERSION_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(version);</a>
<span class="sourceLineNo">361</span><a id="line.361">        }</a>
<span class="sourceLineNo">362</span><a id="line.362">    }</a>
<span class="sourceLineNo">363</span><a id="line.363"></a>
<span class="sourceLineNo">364</span><a id="line.364">    private void appendSecure(StringBuilder sb, boolean secure) {</a>
<span class="sourceLineNo">365</span><a id="line.365">        if (secure) {</a>
<span class="sourceLineNo">366</span><a id="line.366">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">367</span><a id="line.367">            sb.append(SECURE_ATTRIBUTE_NAME); //No value for this attribute</a>
<span class="sourceLineNo">368</span><a id="line.368">        }</a>
<span class="sourceLineNo">369</span><a id="line.369">    }</a>
<span class="sourceLineNo">370</span><a id="line.370"></a>
<span class="sourceLineNo">371</span><a id="line.371">    private void appendHttpOnly(StringBuilder sb, boolean httpOnly) {</a>
<span class="sourceLineNo">372</span><a id="line.372">        if (httpOnly) {</a>
<span class="sourceLineNo">373</span><a id="line.373">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">374</span><a id="line.374">            sb.append(HTTP_ONLY_ATTRIBUTE_NAME); //No value for this attribute</a>
<span class="sourceLineNo">375</span><a id="line.375">        }</a>
<span class="sourceLineNo">376</span><a id="line.376">    }</a>
<span class="sourceLineNo">377</span><a id="line.377"></a>
<span class="sourceLineNo">378</span><a id="line.378">    private void appendSameSite(StringBuilder sb, SameSiteOptions sameSite) {</a>
<span class="sourceLineNo">379</span><a id="line.379">        if (sameSite != null) {</a>
<span class="sourceLineNo">380</span><a id="line.380">            sb.append(ATTRIBUTE_DELIMITER);</a>
<span class="sourceLineNo">381</span><a id="line.381">            sb.append(SAME_SITE_ATTRIBUTE_NAME).append(NAME_VALUE_DELIMITER).append(sameSite.toString().toLowerCase(Locale.ENGLISH));</a>
<span class="sourceLineNo">382</span><a id="line.382">        }</a>
<span class="sourceLineNo">383</span><a id="line.383">    }</a>
<span class="sourceLineNo">384</span><a id="line.384"></a>
<span class="sourceLineNo">385</span><a id="line.385">    /**</a>
<span class="sourceLineNo">386</span><a id="line.386">     * Check whether the given {@code cookiePath} matches the {@code requestPath}</a>
<span class="sourceLineNo">387</span><a id="line.387">     *</a>
<span class="sourceLineNo">388</span><a id="line.388">     * @param cookiePath</a>
<span class="sourceLineNo">389</span><a id="line.389">     * @param requestPath</a>
<span class="sourceLineNo">390</span><a id="line.390">     * @return</a>
<span class="sourceLineNo">391</span><a id="line.391">     * @see &lt;a href="https://tools.ietf.org/html/rfc6265#section-5.1.4"&gt;RFC 6265, Section 5.1.4 "Paths and Path-Match"&lt;/a&gt;</a>
<span class="sourceLineNo">392</span><a id="line.392">     */</a>
<span class="sourceLineNo">393</span><a id="line.393">    private boolean pathMatches(String cookiePath, String requestPath) {</a>
<span class="sourceLineNo">394</span><a id="line.394">        if (!requestPath.startsWith(cookiePath)) {</a>
<span class="sourceLineNo">395</span><a id="line.395">            return false;</a>
<span class="sourceLineNo">396</span><a id="line.396">        }</a>
<span class="sourceLineNo">397</span><a id="line.397"></a>
<span class="sourceLineNo">398</span><a id="line.398">        return requestPath.length() == cookiePath.length()</a>
<span class="sourceLineNo">399</span><a id="line.399">            || cookiePath.charAt(cookiePath.length() - 1) == '/'</a>
<span class="sourceLineNo">400</span><a id="line.400">            || requestPath.charAt(cookiePath.length()) == '/';</a>
<span class="sourceLineNo">401</span><a id="line.401">    }</a>
<span class="sourceLineNo">402</span><a id="line.402"></a>
<span class="sourceLineNo">403</span><a id="line.403">    /**</a>
<span class="sourceLineNo">404</span><a id="line.404">     * Formats a date into a cookie date compatible string (Netscape's specification).</a>
<span class="sourceLineNo">405</span><a id="line.405">     *</a>
<span class="sourceLineNo">406</span><a id="line.406">     * @param date the date to format</a>
<span class="sourceLineNo">407</span><a id="line.407">     * @return an HTTP 1.0/1.1 Cookie compatible date string (GMT-based).</a>
<span class="sourceLineNo">408</span><a id="line.408">     */</a>
<span class="sourceLineNo">409</span><a id="line.409">    private static String toCookieDate(Date date) {</a>
<span class="sourceLineNo">410</span><a id="line.410">        TimeZone tz = TimeZone.getTimeZone(GMT_TIME_ZONE_ID);</a>
<span class="sourceLineNo">411</span><a id="line.411">        DateFormat fmt = new SimpleDateFormat(COOKIE_DATE_FORMAT_STRING, Locale.US);</a>
<span class="sourceLineNo">412</span><a id="line.412">        fmt.setTimeZone(tz);</a>
<span class="sourceLineNo">413</span><a id="line.413">        return fmt.format(date);</a>
<span class="sourceLineNo">414</span><a id="line.414">    }</a>
<span class="sourceLineNo">415</span><a id="line.415"></a>
<span class="sourceLineNo">416</span><a id="line.416">    @Override</a>
<span class="sourceLineNo">417</span><a id="line.417">    public void removeFrom(HttpServletRequest request, HttpServletResponse response) {</a>
<span class="sourceLineNo">418</span><a id="line.418">        String name = getName();</a>
<span class="sourceLineNo">419</span><a id="line.419">        String value = DELETED_COOKIE_VALUE;</a>
<span class="sourceLineNo">420</span><a id="line.420">        String comment = null; //don't need to add extra size to the response - comments are irrelevant for deletions</a>
<span class="sourceLineNo">421</span><a id="line.421">        String domain = getDomain();</a>
<span class="sourceLineNo">422</span><a id="line.422">        String path = calculatePath(request);</a>
<span class="sourceLineNo">423</span><a id="line.423">        int maxAge = 0; //always zero for deletion</a>
<span class="sourceLineNo">424</span><a id="line.424">        int version = getVersion();</a>
<span class="sourceLineNo">425</span><a id="line.425">        boolean secure = isSecure();</a>
<span class="sourceLineNo">426</span><a id="line.426">        boolean httpOnly = false; //no need to add the extra text, plus the value 'deleteMe' is not sensitive at all</a>
<span class="sourceLineNo">427</span><a id="line.427">        SameSiteOptions sameSite = getSameSite();</a>
<span class="sourceLineNo">428</span><a id="line.428"></a>
<span class="sourceLineNo">429</span><a id="line.429">        addCookieHeader(response, name, value, comment, domain, path, maxAge, version, secure, httpOnly, sameSite);</a>
<span class="sourceLineNo">430</span><a id="line.430"></a>
<span class="sourceLineNo">431</span><a id="line.431">        log.trace("Removed '{}' cookie by setting maxAge=0", name);</a>
<span class="sourceLineNo">432</span><a id="line.432">    }</a>
<span class="sourceLineNo">433</span><a id="line.433"></a>
<span class="sourceLineNo">434</span><a id="line.434">    @Override</a>
<span class="sourceLineNo">435</span><a id="line.435">    public String readValue(HttpServletRequest request, HttpServletResponse ignored) {</a>
<span class="sourceLineNo">436</span><a id="line.436">        String name = getName();</a>
<span class="sourceLineNo">437</span><a id="line.437">        String value = null;</a>
<span class="sourceLineNo">438</span><a id="line.438">        javax.servlet.http.Cookie cookie = getCookie(request, name);</a>
<span class="sourceLineNo">439</span><a id="line.439">        if (cookie != null) {</a>
<span class="sourceLineNo">440</span><a id="line.440">            // Validate that the cookie is used at the correct place.</a>
<span class="sourceLineNo">441</span><a id="line.441">            String path = StringUtils.clean(getPath());</a>
<span class="sourceLineNo">442</span><a id="line.442">            if (path != null &amp;&amp; !pathMatches(path, request.getRequestURI())) {</a>
<span class="sourceLineNo">443</span><a id="line.443">                log.warn("Found '{}' cookie at path '{}', but should be only used for '{}'", </a>
<span class="sourceLineNo">444</span><a id="line.444">                                new Object[] { name, Encode.forHtml(request.getRequestURI()), path});</a>
<span class="sourceLineNo">445</span><a id="line.445">            } else {</a>
<span class="sourceLineNo">446</span><a id="line.446">                value = cookie.getValue();</a>
<span class="sourceLineNo">447</span><a id="line.447">                log.debug("Found '{}' cookie value [{}]", name, Encode.forHtml(value));</a>
<span class="sourceLineNo">448</span><a id="line.448">            }</a>
<span class="sourceLineNo">449</span><a id="line.449">        } else {</a>
<span class="sourceLineNo">450</span><a id="line.450">            log.trace("No '{}' cookie value", name);</a>
<span class="sourceLineNo">451</span><a id="line.451">        }</a>
<span class="sourceLineNo">452</span><a id="line.452"></a>
<span class="sourceLineNo">453</span><a id="line.453">        return value;</a>
<span class="sourceLineNo">454</span><a id="line.454">    }</a>
<span class="sourceLineNo">455</span><a id="line.455"></a>
<span class="sourceLineNo">456</span><a id="line.456">    /**</a>
<span class="sourceLineNo">457</span><a id="line.457">     * Returns the cookie with the given name from the request or {@code null} if no cookie</a>
<span class="sourceLineNo">458</span><a id="line.458">     * with that name could be found.</a>
<span class="sourceLineNo">459</span><a id="line.459">     *</a>
<span class="sourceLineNo">460</span><a id="line.460">     * @param request    the current executing http request.</a>
<span class="sourceLineNo">461</span><a id="line.461">     * @param cookieName the name of the cookie to find and return.</a>
<span class="sourceLineNo">462</span><a id="line.462">     * @return the cookie with the given name from the request or {@code null} if no cookie</a>
<span class="sourceLineNo">463</span><a id="line.463">     *         with that name could be found.</a>
<span class="sourceLineNo">464</span><a id="line.464">     */</a>
<span class="sourceLineNo">465</span><a id="line.465">    private static javax.servlet.http.Cookie getCookie(HttpServletRequest request, String cookieName) {</a>
<span class="sourceLineNo">466</span><a id="line.466">        javax.servlet.http.Cookie cookies[] = request.getCookies();</a>
<span class="sourceLineNo">467</span><a id="line.467">        if (cookies != null) {</a>
<span class="sourceLineNo">468</span><a id="line.468">            for (javax.servlet.http.Cookie cookie : cookies) {</a>
<span class="sourceLineNo">469</span><a id="line.469">                if (cookie.getName().equals(cookieName)) {</a>
<span class="sourceLineNo">470</span><a id="line.470">                    return cookie;</a>
<span class="sourceLineNo">471</span><a id="line.471">                }</a>
<span class="sourceLineNo">472</span><a id="line.472">            }</a>
<span class="sourceLineNo">473</span><a id="line.473">        }</a>
<span class="sourceLineNo">474</span><a id="line.474">        return null;</a>
<span class="sourceLineNo">475</span><a id="line.475">    }</a>
<span class="sourceLineNo">476</span><a id="line.476">}</a>




























































</pre>
</div>
</main>
</body>
</html>
