blob: 396ff47f0e21c79dcf85e8c44b3bdf60e6c2a0d0 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (version 1.7.0_25) on Wed May 25 23:25:56 EDT 2016 -->
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>ValidatingSessionManager (Apache Shiro 1.2.5 API)</title>
<meta name="date" content="2016-05-25">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ValidatingSessionManager (Apache Shiro 1.2.5 API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ValidatingSessionManager.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/shiro/session/mgt/ValidatingSession.html" title="interface in org.apache.shiro.session.mgt"><span class="strong">Prev Class</span></a></li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/shiro/session/mgt/ValidatingSessionManager.html" target="_top">Frames</a></li>
<li><a href="ValidatingSessionManager.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.shiro.session.mgt</div>
<h2 title="Interface ValidatingSessionManager" class="title">Interface ValidatingSessionManager</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../../org/apache/shiro/session/mgt/SessionManager.html" title="interface in org.apache.shiro.session.mgt">SessionManager</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/shiro/session/mgt/AbstractValidatingSessionManager.html" title="class in org.apache.shiro.session.mgt">AbstractValidatingSessionManager</a>, <a href="../../../../../org/apache/shiro/session/mgt/DefaultSessionManager.html" title="class in org.apache.shiro.session.mgt">DefaultSessionManager</a>, <a href="../../../../../org/apache/shiro/web/session/mgt/DefaultWebSessionManager.html" title="class in org.apache.shiro.web.session.mgt">DefaultWebSessionManager</a></dd>
</dl>
<hr>
<br>
<pre>public interface <a href="../../../../../src-html/org/apache/shiro/session/mgt/ValidatingSessionManager.html#line.27">ValidatingSessionManager</a>
extends <a href="../../../../../org/apache/shiro/session/mgt/SessionManager.html" title="interface in org.apache.shiro.session.mgt">SessionManager</a></pre>
<div class="block">A ValidatingSessionManager is a SessionManager that can proactively validate any or all sessions
that may be expired.</div>
<dl><dt><span class="strong">Since:</span></dt>
<dd>0.1</dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/shiro/session/mgt/ValidatingSessionManager.html#validateSessions()">validateSessions</a></strong>()</code>
<div class="block">Performs session validation for all open/active sessions in the system (those that
have not been stopped or expired), and validates each one.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_org.apache.shiro.session.mgt.SessionManager">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.shiro.session.mgt.<a href="../../../../../org/apache/shiro/session/mgt/SessionManager.html" title="interface in org.apache.shiro.session.mgt">SessionManager</a></h3>
<code><a href="../../../../../org/apache/shiro/session/mgt/SessionManager.html#getSession(org.apache.shiro.session.mgt.SessionKey)">getSession</a>, <a href="../../../../../org/apache/shiro/session/mgt/SessionManager.html#start(org.apache.shiro.session.mgt.SessionContext)">start</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="validateSessions()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>validateSessions</h4>
<pre>void&nbsp;<a href="../../../../../src-html/org/apache/shiro/session/mgt/ValidatingSessionManager.html#line.71">validateSessions</a>()</pre>
<div class="block">Performs session validation for all open/active sessions in the system (those that
have not been stopped or expired), and validates each one. If a session is
found to be invalid (e.g. it has expired), it is updated and saved to the EIS.
<p/>
This method is necessary in order to handle orphaned sessions and is expected to be run at
a regular interval, such as once an hour, once a day or once a week, etc.
The &quot;best&quot; frequency to run this method is entirely dependent upon the application
and would be based on factors such as performance, average number of active users, hours of
least activity, and other things.
<p/>
Most enterprise applications use a request/response programming model.
This is obvious in the case of web applications due to the HTTP protocol, but it is
equally true of remote client applications making remote method invocations. The server
essentially sits idle and only &quot;works&quot; when responding to client requests and/or
method invocations. This type of model is particularly efficent since it means the
security system only has to validate a session during those cases. Such
&quot;lazy&quot; behavior enables the system to lie stateless and/or idle and only incur
overhead for session validation when necessary.
<p/>
However, if a client forgets to log-out, or in the event of a server failure, it is
possible for sessions to be orphaned since no further requests would utilize that session.
Because of these lower-probability cases, it might be required to regularly clean-up the sessions
maintained by the system, especially if sessions are backed by a persistent data store.
<p/>
Even in applications that aren't primarily based on a request/response model,
such as those that use enterprise asynchronous messaging (where data is pushed to
a client without first receiving a client request), it is almost always acceptable to
utilize this lazy approach and run this method at defined interval.
<p/>
Systems that want to proactively validate individual sessions may simply call the
<a href="../../../../../org/apache/shiro/session/mgt/SessionManager.html#getSession(org.apache.shiro.session.mgt.SessionKey)"><code>getSession(SessionKey)</code></a> method on any
<code>ValidatingSessionManager</code> instance as that method is expected to
validate the session before retrieving it. Note that even with proactive calls to <code>getSession</code>,
this <code>validateSessions()</code> method should be invoked regularly anyway to <em>guarantee</em> no
orphans exist.
<p/>
<b>Note:</b> Shiro supports automatic execution of this method at a regular interval
by using <a href="../../../../../org/apache/shiro/session/mgt/SessionValidationScheduler.html" title="interface in org.apache.shiro.session.mgt"><code>SessionValidationScheduler</code></a>s. The Shiro default SecurityManager implementations
needing session validation will create and use one by default if one is not provided by the
application configuration.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ValidatingSessionManager.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/shiro/session/mgt/ValidatingSession.html" title="interface in org.apache.shiro.session.mgt"><span class="strong">Prev Class</span></a></li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/shiro/session/mgt/ValidatingSessionManager.html" target="_top">Frames</a></li>
<li><a href="ValidatingSessionManager.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2004-2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.</small></p>
</body>
</html>