<!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.mgt;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.subject.Subject;</a>
<span class="sourceLineNo">022</span><a id="line.22"></a>
<span class="sourceLineNo">023</span><a id="line.23">/**</a>
<span class="sourceLineNo">024</span><a id="line.24"> * A Default {@code SessionStorageEvaluator} that provides reasonable control over if and how Sessions may be used for</a>
<span class="sourceLineNo">025</span><a id="line.25"> * storing Subject state.  See the {@link #isSessionStorageEnabled(org.apache.shiro.subject.Subject)}</a>
<span class="sourceLineNo">026</span><a id="line.26"> * method for exact behavior.</a>
<span class="sourceLineNo">027</span><a id="line.27"> *</a>
<span class="sourceLineNo">028</span><a id="line.28"> * @since 1.2</a>
<span class="sourceLineNo">029</span><a id="line.29"> */</a>
<span class="sourceLineNo">030</span><a id="line.30">public class DefaultSessionStorageEvaluator implements SessionStorageEvaluator {</a>
<span class="sourceLineNo">031</span><a id="line.31"></a>
<span class="sourceLineNo">032</span><a id="line.32">    /**</a>
<span class="sourceLineNo">033</span><a id="line.33">     * Global policy determining if Subject sessions may be used to persist Subject state if the Subject's Session</a>
<span class="sourceLineNo">034</span><a id="line.34">     * does not yet exist.</a>
<span class="sourceLineNo">035</span><a id="line.35">     */</a>
<span class="sourceLineNo">036</span><a id="line.36">    private boolean sessionStorageEnabled = true;</a>
<span class="sourceLineNo">037</span><a id="line.37"></a>
<span class="sourceLineNo">038</span><a id="line.38">    /**</a>
<span class="sourceLineNo">039</span><a id="line.39">     * This implementation functions as follows:</a>
<span class="sourceLineNo">040</span><a id="line.40">     * &lt;ul&gt;</a>
<span class="sourceLineNo">041</span><a id="line.41">     * &lt;li&gt;If the specified Subject already has an existing {@code Session} (typically because an application developer</a>
<span class="sourceLineNo">042</span><a id="line.42">     * has called {@code subject.getSession()} already), Shiro will use that existing session to store subject state.&lt;/li&gt;</a>
<span class="sourceLineNo">043</span><a id="line.43">     * &lt;li&gt;If a Subject does not yet have a Session, this implementation checks the</a>
<span class="sourceLineNo">044</span><a id="line.44">     * {@link #isSessionStorageEnabled() sessionStorageEnabled} property:</a>
<span class="sourceLineNo">045</span><a id="line.45">     * &lt;ul&gt;</a>
<span class="sourceLineNo">046</span><a id="line.46">     * &lt;li&gt;If {@code sessionStorageEnabled} is true (the default setting), a new session may be created to persist</a>
<span class="sourceLineNo">047</span><a id="line.47">     * Subject state if necessary.&lt;/li&gt;</a>
<span class="sourceLineNo">048</span><a id="line.48">     * &lt;li&gt;If {@code sessionStorageEnabled} is {@code false}, a new session will &lt;em&gt;not&lt;/em&gt; be created to persist</a>
<span class="sourceLineNo">049</span><a id="line.49">     * session state.&lt;/li&gt;</a>
<span class="sourceLineNo">050</span><a id="line.50">     * &lt;/ul&gt;&lt;/li&gt;</a>
<span class="sourceLineNo">051</span><a id="line.51">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">052</span><a id="line.52">     * Most applications use Sessions and are OK with the default {@code true} setting for {@code sessionStorageEnabled}.</a>
<span class="sourceLineNo">053</span><a id="line.53">     * &lt;p/&gt;</a>
<span class="sourceLineNo">054</span><a id="line.54">     * However, if your application is a purely 100% stateless application that never uses sessions,</a>
<span class="sourceLineNo">055</span><a id="line.55">     * you will want to set {@code sessionStorageEnabled} to {@code false}.  Realize that a {@code false} value will</a>
<span class="sourceLineNo">056</span><a id="line.56">     * ensure that any subject login only retains the authenticated identity for the duration of a request.  Any other</a>
<span class="sourceLineNo">057</span><a id="line.57">     * requests, invocations or messages will not be authenticated.</a>
<span class="sourceLineNo">058</span><a id="line.58">     *</a>
<span class="sourceLineNo">059</span><a id="line.59">     * @param subject the {@code Subject} for which session state persistence may be enabled</a>
<span class="sourceLineNo">060</span><a id="line.60">     * @return the value of {@link #isSessionStorageEnabled()} and ignores the {@code Subject} argument.</a>
<span class="sourceLineNo">061</span><a id="line.61">     */</a>
<span class="sourceLineNo">062</span><a id="line.62">    public boolean isSessionStorageEnabled(Subject subject) {</a>
<span class="sourceLineNo">063</span><a id="line.63">        return (subject != null &amp;&amp; subject.getSession(false) != null) || isSessionStorageEnabled();</a>
<span class="sourceLineNo">064</span><a id="line.64">    }</a>
<span class="sourceLineNo">065</span><a id="line.65"></a>
<span class="sourceLineNo">066</span><a id="line.66">    /**</a>
<span class="sourceLineNo">067</span><a id="line.67">     * Returns {@code true} if any Subject's {@code Session} may be used to persist that {@code Subject}'s state,</a>
<span class="sourceLineNo">068</span><a id="line.68">     * {@code false} otherwise.  The default value is {@code true}.</a>
<span class="sourceLineNo">069</span><a id="line.69">     * &lt;p/&gt;</a>
<span class="sourceLineNo">070</span><a id="line.70">     * &lt;b&gt;N.B.&lt;/b&gt; This is a global configuration setting; setting this value to {@code false} will disable sessions</a>
<span class="sourceLineNo">071</span><a id="line.71">     * to persist Subject state for all Subjects that do not already have a Session.  It should typically only be set</a>
<span class="sourceLineNo">072</span><a id="line.72">     * to {@code false} for 100% stateless applications (e.g. when sessions aren't used or when remote clients</a>
<span class="sourceLineNo">073</span><a id="line.73">     * authenticate on every request).</a>
<span class="sourceLineNo">074</span><a id="line.74">     *</a>
<span class="sourceLineNo">075</span><a id="line.75">     * @return {@code true} if any Subject's {@code Session} may be used to persist that {@code Subject}'s state,</a>
<span class="sourceLineNo">076</span><a id="line.76">     *         {@code false} otherwise.</a>
<span class="sourceLineNo">077</span><a id="line.77">     */</a>
<span class="sourceLineNo">078</span><a id="line.78">    public boolean isSessionStorageEnabled() {</a>
<span class="sourceLineNo">079</span><a id="line.79">        return sessionStorageEnabled;</a>
<span class="sourceLineNo">080</span><a id="line.80">    }</a>
<span class="sourceLineNo">081</span><a id="line.81"></a>
<span class="sourceLineNo">082</span><a id="line.82">    /**</a>
<span class="sourceLineNo">083</span><a id="line.83">     * Sets if any Subject's {@code Session} may be used to persist that {@code Subject}'s state.  The</a>
<span class="sourceLineNo">084</span><a id="line.84">     * default value is {@code true}.</a>
<span class="sourceLineNo">085</span><a id="line.85">     * &lt;p/&gt;</a>
<span class="sourceLineNo">086</span><a id="line.86">     * &lt;b&gt;N.B.&lt;/b&gt; This is a global configuration setting; setting this value to {@code false} will disable sessions</a>
<span class="sourceLineNo">087</span><a id="line.87">     * to persist Subject state for all Subjects that do not already have a Session.  It should typically only be set</a>
<span class="sourceLineNo">088</span><a id="line.88">     * to {@code false} for 100% stateless applications (e.g. when sessions aren't used or when remote clients</a>
<span class="sourceLineNo">089</span><a id="line.89">     * authenticate on every request).</a>
<span class="sourceLineNo">090</span><a id="line.90">     *</a>
<span class="sourceLineNo">091</span><a id="line.91">     * @param sessionStorageEnabled if any Subject's {@code Session} may be used to persist that {@code Subject}'s state.</a>
<span class="sourceLineNo">092</span><a id="line.92">     */</a>
<span class="sourceLineNo">093</span><a id="line.93">    public void setSessionStorageEnabled(boolean sessionStorageEnabled) {</a>
<span class="sourceLineNo">094</span><a id="line.94">        this.sessionStorageEnabled = sessionStorageEnabled;</a>
<span class="sourceLineNo">095</span><a id="line.95">    }</a>
<span class="sourceLineNo">096</span><a id="line.96">}</a>




























































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