<!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"> * Copyright 2008 Les Hazlewood</a>
<span class="sourceLineNo">003</span><a id="line.3"> *</a>
<span class="sourceLineNo">004</span><a id="line.4"> * Licensed under the Apache License, Version 2.0 (the "License");</a>
<span class="sourceLineNo">005</span><a id="line.5"> * you may not use this file except in compliance with the License.</a>
<span class="sourceLineNo">006</span><a id="line.6"> * You may obtain a copy of the License at</a>
<span class="sourceLineNo">007</span><a id="line.7"> *</a>
<span class="sourceLineNo">008</span><a id="line.8"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> * Unless required by applicable law or agreed to in writing, software</a>
<span class="sourceLineNo">011</span><a id="line.11"> * distributed under the License is distributed on an "AS IS" BASIS,</a>
<span class="sourceLineNo">012</span><a id="line.12"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</a>
<span class="sourceLineNo">013</span><a id="line.13"> * See the License for the specific language governing permissions and</a>
<span class="sourceLineNo">014</span><a id="line.14"> * limitations under the License.</a>
<span class="sourceLineNo">015</span><a id="line.15"> */</a>
<span class="sourceLineNo">016</span><a id="line.16">package org.apache.shiro.session.mgt;</a>
<span class="sourceLineNo">017</span><a id="line.17"></a>
<span class="sourceLineNo">018</span><a id="line.18">import org.apache.shiro.session.InvalidSessionException;</a>
<span class="sourceLineNo">019</span><a id="line.19"></a>
<span class="sourceLineNo">020</span><a id="line.20">import java.util.Collection;</a>
<span class="sourceLineNo">021</span><a id="line.21">import java.util.Date;</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 {@code Native} session manager is one that manages sessions natively - that is, it is directly responsible</a>
<span class="sourceLineNo">025</span><a id="line.25"> * for the creation, persistence and removal of {@link org.apache.shiro.session.Session Session} instances and their</a>
<span class="sourceLineNo">026</span><a id="line.26"> * lifecycles.</a>
<span class="sourceLineNo">027</span><a id="line.27"> *</a>
<span class="sourceLineNo">028</span><a id="line.28"> * @since 1.0</a>
<span class="sourceLineNo">029</span><a id="line.29"> */</a>
<span class="sourceLineNo">030</span><a id="line.30">public interface NativeSessionManager extends SessionManager {</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">     * Returns the time the associated {@code Session} started (was created).</a>
<span class="sourceLineNo">034</span><a id="line.34">     *</a>
<span class="sourceLineNo">035</span><a id="line.35">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">036</span><a id="line.36">     * @return the time the specified {@code Session} started (was created).</a>
<span class="sourceLineNo">037</span><a id="line.37">     * @see org.apache.shiro.session.Session#getStartTimestamp()</a>
<span class="sourceLineNo">038</span><a id="line.38">     */</a>
<span class="sourceLineNo">039</span><a id="line.39">    Date getStartTimestamp(SessionKey key);</a>
<span class="sourceLineNo">040</span><a id="line.40"></a>
<span class="sourceLineNo">041</span><a id="line.41">    /**</a>
<span class="sourceLineNo">042</span><a id="line.42">     * Returns the time the associated {@code Session} last interacted with the system.</a>
<span class="sourceLineNo">043</span><a id="line.43">     *</a>
<span class="sourceLineNo">044</span><a id="line.44">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">045</span><a id="line.45">     * @return time the session last accessed the system</a>
<span class="sourceLineNo">046</span><a id="line.46">     * @see org.apache.shiro.session.Session#getLastAccessTime()</a>
<span class="sourceLineNo">047</span><a id="line.47">     * @see org.apache.shiro.session.Session#touch()</a>
<span class="sourceLineNo">048</span><a id="line.48">     */</a>
<span class="sourceLineNo">049</span><a id="line.49">    Date getLastAccessTime(SessionKey key);</a>
<span class="sourceLineNo">050</span><a id="line.50"></a>
<span class="sourceLineNo">051</span><a id="line.51">    /**</a>
<span class="sourceLineNo">052</span><a id="line.52">     * Returns {@code true} if the associated session is valid (it exists and is not stopped nor expired),</a>
<span class="sourceLineNo">053</span><a id="line.53">     * {@code false} otherwise.</a>
<span class="sourceLineNo">054</span><a id="line.54">     *</a>
<span class="sourceLineNo">055</span><a id="line.55">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">056</span><a id="line.56">     * @return {@code true} if the session is valid (exists and is not stopped or expired), {@code false} otherwise.</a>
<span class="sourceLineNo">057</span><a id="line.57">     */</a>
<span class="sourceLineNo">058</span><a id="line.58">    boolean isValid(SessionKey key);</a>
<span class="sourceLineNo">059</span><a id="line.59"></a>
<span class="sourceLineNo">060</span><a id="line.60">    /**</a>
<span class="sourceLineNo">061</span><a id="line.61">     * Returns quietly if the associated session is valid (it exists and is not stopped or expired) or throws</a>
<span class="sourceLineNo">062</span><a id="line.62">     * an {@link org.apache.shiro.session.InvalidSessionException} indicating that the session id is invalid.  This</a>
<span class="sourceLineNo">063</span><a id="line.63">     * might be preferred to be used instead of {@link #isValid} since any exception thrown will definitively explain</a>
<span class="sourceLineNo">064</span><a id="line.64">     * the reason for invalidation.</a>
<span class="sourceLineNo">065</span><a id="line.65">     *</a>
<span class="sourceLineNo">066</span><a id="line.66">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">067</span><a id="line.67">     * @throws org.apache.shiro.session.InvalidSessionException</a>
<span class="sourceLineNo">068</span><a id="line.68">     *          if the session id is invalid (it does not exist or it is stopped or expired).</a>
<span class="sourceLineNo">069</span><a id="line.69">     */</a>
<span class="sourceLineNo">070</span><a id="line.70">    void checkValid(SessionKey key) throws InvalidSessionException;</a>
<span class="sourceLineNo">071</span><a id="line.71"></a>
<span class="sourceLineNo">072</span><a id="line.72">    /**</a>
<span class="sourceLineNo">073</span><a id="line.73">     * Returns the time in milliseconds that the associated session may remain idle before expiring.</a>
<span class="sourceLineNo">074</span><a id="line.74">     * &lt;ul&gt;</a>
<span class="sourceLineNo">075</span><a id="line.75">     * &lt;li&gt;A negative return value means the session will never expire.&lt;/li&gt;</a>
<span class="sourceLineNo">076</span><a id="line.76">     * &lt;li&gt;A non-negative return value (0 or greater) means the session expiration will occur if idle for that</a>
<span class="sourceLineNo">077</span><a id="line.77">     * length of time.&lt;/li&gt;</a>
<span class="sourceLineNo">078</span><a id="line.78">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">079</span><a id="line.79">     *</a>
<span class="sourceLineNo">080</span><a id="line.80">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">081</span><a id="line.81">     * @return the time in milliseconds that the associated session may remain idle before expiring.</a>
<span class="sourceLineNo">082</span><a id="line.82">     * @throws org.apache.shiro.session.InvalidSessionException</a>
<span class="sourceLineNo">083</span><a id="line.83">     *          if the session has been stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">084</span><a id="line.84">     */</a>
<span class="sourceLineNo">085</span><a id="line.85">    long getTimeout(SessionKey key) throws InvalidSessionException;</a>
<span class="sourceLineNo">086</span><a id="line.86"></a>
<span class="sourceLineNo">087</span><a id="line.87">    /**</a>
<span class="sourceLineNo">088</span><a id="line.88">     * Sets the time in milliseconds that the associated session may remain idle before expiring.</a>
<span class="sourceLineNo">089</span><a id="line.89">     * &lt;ul&gt;</a>
<span class="sourceLineNo">090</span><a id="line.90">     * &lt;li&gt;A negative return value means the session will never expire.&lt;/li&gt;</a>
<span class="sourceLineNo">091</span><a id="line.91">     * &lt;li&gt;A non-negative return value (0 or greater) means the session expiration will occur if idle for that</a>
<span class="sourceLineNo">092</span><a id="line.92">     * length of time.&lt;/li&gt;</a>
<span class="sourceLineNo">093</span><a id="line.93">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">094</span><a id="line.94">     *</a>
<span class="sourceLineNo">095</span><a id="line.95">     * @param key                 the session key to use to look up the target session.</a>
<span class="sourceLineNo">096</span><a id="line.96">     * @param maxIdleTimeInMillis the time in milliseconds that the associated session may remain idle before expiring.</a>
<span class="sourceLineNo">097</span><a id="line.97">     * @throws org.apache.shiro.session.InvalidSessionException</a>
<span class="sourceLineNo">098</span><a id="line.98">     *          if the session has been stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">099</span><a id="line.99">     */</a>
<span class="sourceLineNo">100</span><a id="line.100">    void setTimeout(SessionKey key, long maxIdleTimeInMillis) throws InvalidSessionException;</a>
<span class="sourceLineNo">101</span><a id="line.101"></a>
<span class="sourceLineNo">102</span><a id="line.102">    /**</a>
<span class="sourceLineNo">103</span><a id="line.103">     * Updates the last accessed time of the session identified by &lt;code&gt;sessionId&lt;/code&gt;.  This</a>
<span class="sourceLineNo">104</span><a id="line.104">     * can be used to explicitly ensure that a session does not time out.</a>
<span class="sourceLineNo">105</span><a id="line.105">     *</a>
<span class="sourceLineNo">106</span><a id="line.106">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">107</span><a id="line.107">     * @throws org.apache.shiro.session.InvalidSessionException</a>
<span class="sourceLineNo">108</span><a id="line.108">     *          if the session has been stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">109</span><a id="line.109">     * @see org.apache.shiro.session.Session#touch</a>
<span class="sourceLineNo">110</span><a id="line.110">     */</a>
<span class="sourceLineNo">111</span><a id="line.111">    void touch(SessionKey key) throws InvalidSessionException;</a>
<span class="sourceLineNo">112</span><a id="line.112"></a>
<span class="sourceLineNo">113</span><a id="line.113">    /**</a>
<span class="sourceLineNo">114</span><a id="line.114">     * Returns the host name or IP string of the host where the session was started, if known.  If</a>
<span class="sourceLineNo">115</span><a id="line.115">     * no host name or IP was specified when starting the session, this method returns {@code null}</a>
<span class="sourceLineNo">116</span><a id="line.116">     *</a>
<span class="sourceLineNo">117</span><a id="line.117">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">118</span><a id="line.118">     * @return the host name or ip address of the host where the session originated, if known.  If unknown,</a>
<span class="sourceLineNo">119</span><a id="line.119">     *         this method returns {@code null}.</a>
<span class="sourceLineNo">120</span><a id="line.120">     */</a>
<span class="sourceLineNo">121</span><a id="line.121">    String getHost(SessionKey key);</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">     * Explicitly stops the associated session, thereby releasing all of its resources.</a>
<span class="sourceLineNo">125</span><a id="line.125">     *</a>
<span class="sourceLineNo">126</span><a id="line.126">     * @param key the session key to use to look up the target session.</a>
<span class="sourceLineNo">127</span><a id="line.127">     * @throws InvalidSessionException if the session has stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">128</span><a id="line.128">     * @see org.apache.shiro.session.Session#stop</a>
<span class="sourceLineNo">129</span><a id="line.129">     */</a>
<span class="sourceLineNo">130</span><a id="line.130">    void stop(SessionKey key) throws InvalidSessionException;</a>
<span class="sourceLineNo">131</span><a id="line.131"></a>
<span class="sourceLineNo">132</span><a id="line.132">    /**</a>
<span class="sourceLineNo">133</span><a id="line.133">     * Returns all attribute keys maintained by the target session or an empty collection if there are no attributes.</a>
<span class="sourceLineNo">134</span><a id="line.134">     *</a>
<span class="sourceLineNo">135</span><a id="line.135">     * @param sessionKey the session key to use to look up the target session.</a>
<span class="sourceLineNo">136</span><a id="line.136">     * @return all attribute keys maintained by the target session or an empty collection if there are no attributes.</a>
<span class="sourceLineNo">137</span><a id="line.137">     * @throws InvalidSessionException if the associated session has stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">138</span><a id="line.138">     * @see org.apache.shiro.session.Session#getAttributeKeys()</a>
<span class="sourceLineNo">139</span><a id="line.139">     */</a>
<span class="sourceLineNo">140</span><a id="line.140">    Collection&lt;Object&gt; getAttributeKeys(SessionKey sessionKey);</a>
<span class="sourceLineNo">141</span><a id="line.141"></a>
<span class="sourceLineNo">142</span><a id="line.142">    /**</a>
<span class="sourceLineNo">143</span><a id="line.143">     * Returns the object bound to the associated session identified by the specified attribute key.  If there</a>
<span class="sourceLineNo">144</span><a id="line.144">     * is no object bound under the attribute key for the given session, {@code null} is returned.</a>
<span class="sourceLineNo">145</span><a id="line.145">     *</a>
<span class="sourceLineNo">146</span><a id="line.146">     * @param sessionKey   session key to use to look up the target session.</a>
<span class="sourceLineNo">147</span><a id="line.147">     * @param attributeKey the unique name of the object bound to the associated session</a>
<span class="sourceLineNo">148</span><a id="line.148">     * @return the object bound under the {@code attributeKey} or {@code null} if there is no object bound.</a>
<span class="sourceLineNo">149</span><a id="line.149">     * @throws InvalidSessionException if the specified session has stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">150</span><a id="line.150">     * @see org.apache.shiro.session.Session#getAttribute(Object key)</a>
<span class="sourceLineNo">151</span><a id="line.151">     */</a>
<span class="sourceLineNo">152</span><a id="line.152">    Object getAttribute(SessionKey sessionKey, Object attributeKey) throws InvalidSessionException;</a>
<span class="sourceLineNo">153</span><a id="line.153"></a>
<span class="sourceLineNo">154</span><a id="line.154">    /**</a>
<span class="sourceLineNo">155</span><a id="line.155">     * Binds the specified {@code value} to the associated session uniquely identified by the {@code attributeKey}.</a>
<span class="sourceLineNo">156</span><a id="line.156">     * If there is already a session attribute bound under the {@code attributeKey}, that existing object will be</a>
<span class="sourceLineNo">157</span><a id="line.157">     * replaced by the new {@code value}.</a>
<span class="sourceLineNo">158</span><a id="line.158">     * &lt;p/&gt;</a>
<span class="sourceLineNo">159</span><a id="line.159">     * If the {@code value} parameter is null, it has the same effect as if the</a>
<span class="sourceLineNo">160</span><a id="line.160">     * {@link #removeAttribute(SessionKey sessionKey, Object attributeKey)} method was called.</a>
<span class="sourceLineNo">161</span><a id="line.161">     *</a>
<span class="sourceLineNo">162</span><a id="line.162">     * @param sessionKey   the session key to use to look up the target session.</a>
<span class="sourceLineNo">163</span><a id="line.163">     * @param attributeKey the key under which the {@code value} object will be bound in this session</a>
<span class="sourceLineNo">164</span><a id="line.164">     * @param value        the object to bind in this session.</a>
<span class="sourceLineNo">165</span><a id="line.165">     * @throws InvalidSessionException if the specified session has stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">166</span><a id="line.166">     * @see org.apache.shiro.session.Session#setAttribute(Object key, Object value)</a>
<span class="sourceLineNo">167</span><a id="line.167">     */</a>
<span class="sourceLineNo">168</span><a id="line.168">    void setAttribute(SessionKey sessionKey, Object attributeKey, Object value) throws InvalidSessionException;</a>
<span class="sourceLineNo">169</span><a id="line.169"></a>
<span class="sourceLineNo">170</span><a id="line.170">    /**</a>
<span class="sourceLineNo">171</span><a id="line.171">     * Removes (unbinds) the object bound to associated {@code Session} under the given {@code attributeKey}.</a>
<span class="sourceLineNo">172</span><a id="line.172">     *</a>
<span class="sourceLineNo">173</span><a id="line.173">     * @param sessionKey   session key to use to look up the target session.</a>
<span class="sourceLineNo">174</span><a id="line.174">     * @param attributeKey the key uniquely identifying the object to remove</a>
<span class="sourceLineNo">175</span><a id="line.175">     * @return the object removed or {@code null} if there was no object bound under the specified {@code attributeKey}.</a>
<span class="sourceLineNo">176</span><a id="line.176">     * @throws InvalidSessionException if the specified session has stopped or expired prior to calling this method.</a>
<span class="sourceLineNo">177</span><a id="line.177">     * @see org.apache.shiro.session.Session#removeAttribute(Object key)</a>
<span class="sourceLineNo">178</span><a id="line.178">     */</a>
<span class="sourceLineNo">179</span><a id="line.179">    Object removeAttribute(SessionKey sessionKey, Object attributeKey) throws InvalidSessionException;</a>
<span class="sourceLineNo">180</span><a id="line.180"></a>
<span class="sourceLineNo">181</span><a id="line.181">}</a>




























































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