blob: 3e4564f84e0828e94a3d6d01472c13c0bcb48a51 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.10) on Fri Feb 26 09:50:23 CST 2021 -->
<title>LoginAuthenticator (Jetty :: Project 9.4.38.v20210224 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-02-26">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="LoginAuthenticator (Jetty :: Project 9.4.38.v20210224 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LoginAuthenticator.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" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</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>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.jetty.security.authentication</a></div>
<h2 title="Class LoginAuthenticator" class="title">Class LoginAuthenticator</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.eclipse.jetty.security.authentication.LoginAuthenticator</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../Authenticator.html" title="interface in org.eclipse.jetty.security">Authenticator</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="BasicAuthenticator.html" title="class in org.eclipse.jetty.security.authentication">BasicAuthenticator</a></code>, <code><a href="ClientCertAuthenticator.html" title="class in org.eclipse.jetty.security.authentication">ClientCertAuthenticator</a></code>, <code><a href="ConfigurableSpnegoAuthenticator.html" title="class in org.eclipse.jetty.security.authentication">ConfigurableSpnegoAuthenticator</a></code>, <code><a href="DigestAuthenticator.html" title="class in org.eclipse.jetty.security.authentication">DigestAuthenticator</a></code>, <code><a href="FormAuthenticator.html" title="class in org.eclipse.jetty.security.authentication">FormAuthenticator</a></code>, <code><a href="../jaspi/JaspiAuthenticator.html" title="class in org.eclipse.jetty.security.jaspi">JaspiAuthenticator</a></code>, <code><a href="../openid/OpenIdAuthenticator.html" title="class in org.eclipse.jetty.security.openid">OpenIdAuthenticator</a></code>, <code><a href="SpnegoAuthenticator.html" title="class in org.eclipse.jetty.security.authentication">SpnegoAuthenticator</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">LoginAuthenticator</span>
extends java.lang.Object
implements <a href="../Authenticator.html" title="interface in org.eclipse.jetty.security">Authenticator</a></pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.eclipse.jetty.security.Authenticator">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.security.<a href="../Authenticator.html" title="interface in org.eclipse.jetty.security">Authenticator</a></h3>
<code><a href="../Authenticator.AuthConfiguration.html" title="interface in org.eclipse.jetty.security">Authenticator.AuthConfiguration</a>, <a href="../Authenticator.Factory.html" title="interface in org.eclipse.jetty.security">Authenticator.Factory</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../IdentityService.html" title="interface in org.eclipse.jetty.security">IdentityService</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#_identityService">_identityService</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../LoginService.html" title="interface in org.eclipse.jetty.security">LoginService</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#_loginService">_loginService</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">LoginAuthenticator</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../LoginService.html" title="interface in org.eclipse.jetty.security">LoginService</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getLoginService()">getLoginService</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../server/UserIdentity.html" title="interface in org.eclipse.jetty.server">UserIdentity</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#login(java.lang.String,java.lang.Object,javax.servlet.ServletRequest)">login</a></span>&#8203;(java.lang.String&nbsp;username,
java.lang.Object&nbsp;password,
javax.servlet.ServletRequest&nbsp;servletRequest)</code></th>
<td class="colLast">
<div class="block">If the UserIdentity is not null after this method calls <a href="../LoginService.html#login(java.lang.String,java.lang.Object,javax.servlet.ServletRequest)"><code>LoginService.login(String, Object, ServletRequest)</code></a>, it
is assumed that the user is fully authenticated and we need to change the session id to prevent
session fixation vulnerability.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#logout(javax.servlet.ServletRequest)">logout</a></span>&#8203;(javax.servlet.ServletRequest&nbsp;request)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#prepareRequest(javax.servlet.ServletRequest)">prepareRequest</a></span>&#8203;(javax.servlet.ServletRequest&nbsp;request)</code></th>
<td class="colLast">
<div class="block">Called prior to validateRequest.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected javax.servlet.http.HttpSession</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#renewSession(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)">renewSession</a></span>&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request,
javax.servlet.http.HttpServletResponse&nbsp;response)</code></th>
<td class="colLast">
<div class="block">Change the session id.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setConfiguration(org.eclipse.jetty.security.Authenticator.AuthConfiguration)">setConfiguration</a></span>&#8203;(<a href="../Authenticator.AuthConfiguration.html" title="interface in org.eclipse.jetty.security">Authenticator.AuthConfiguration</a>&nbsp;configuration)</code></th>
<td class="colLast">
<div class="block">Configure the Authenticator</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.eclipse.jetty.security.Authenticator">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.eclipse.jetty.security.<a href="../Authenticator.html" title="interface in org.eclipse.jetty.security">Authenticator</a></h3>
<code><a href="../Authenticator.html#getAuthMethod()">getAuthMethod</a>, <a href="../Authenticator.html#secureResponse(javax.servlet.ServletRequest,javax.servlet.ServletResponse,boolean,org.eclipse.jetty.server.Authentication.User)">secureResponse</a>, <a href="../Authenticator.html#validateRequest(javax.servlet.ServletRequest,javax.servlet.ServletResponse,boolean)">validateRequest</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="_loginService">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>_loginService</h4>
<pre>protected&nbsp;<a href="../LoginService.html" title="interface in org.eclipse.jetty.security">LoginService</a> _loginService</pre>
</li>
</ul>
<a id="_identityService">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>_identityService</h4>
<pre>protected&nbsp;<a href="../IdentityService.html" title="interface in org.eclipse.jetty.security">IdentityService</a> _identityService</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>LoginAuthenticator</h4>
<pre>protected&nbsp;LoginAuthenticator()</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="prepareRequest(javax.servlet.ServletRequest)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prepareRequest</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;prepareRequest&#8203;(javax.servlet.ServletRequest&nbsp;request)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Authenticator.html#prepareRequest(javax.servlet.ServletRequest)">Authenticator</a></code></span></div>
<div class="block">Called prior to validateRequest. The authenticator can
manipulate the request to update it with information that
can be inspected prior to validateRequest being called.
The primary purpose of this method is to satisfy the Servlet
Spec 3.1 section 13.6.3 on handling Form authentication
where the http method of the original request causing authentication
is not the same as the http method resulting from the redirect
after authentication.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../Authenticator.html#prepareRequest(javax.servlet.ServletRequest)">prepareRequest</a></code>&nbsp;in interface&nbsp;<code><a href="../Authenticator.html" title="interface in org.eclipse.jetty.security">Authenticator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - the request to manipulate</dd>
</dl>
</li>
</ul>
<a id="login(java.lang.String,java.lang.Object,javax.servlet.ServletRequest)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>login</h4>
<pre class="methodSignature">public&nbsp;<a href="../../server/UserIdentity.html" title="interface in org.eclipse.jetty.server">UserIdentity</a>&nbsp;login&#8203;(java.lang.String&nbsp;username,
java.lang.Object&nbsp;password,
javax.servlet.ServletRequest&nbsp;servletRequest)</pre>
<div class="block">If the UserIdentity is not null after this method calls <a href="../LoginService.html#login(java.lang.String,java.lang.Object,javax.servlet.ServletRequest)"><code>LoginService.login(String, Object, ServletRequest)</code></a>, it
is assumed that the user is fully authenticated and we need to change the session id to prevent
session fixation vulnerability. If the UserIdentity is not necessarily fully
authenticated, then subclasses must override this method and
determine when the UserIdentity IS fully authenticated and renew the session id.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>username</code> - the username of the client to be authenticated</dd>
<dd><code>password</code> - the user's credential</dd>
<dd><code>servletRequest</code> - the inbound request that needs authentication</dd>
</dl>
</li>
</ul>
<a id="logout(javax.servlet.ServletRequest)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>logout</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;logout&#8203;(javax.servlet.ServletRequest&nbsp;request)</pre>
</li>
</ul>
<a id="setConfiguration(org.eclipse.jetty.security.Authenticator.AuthConfiguration)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setConfiguration</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setConfiguration&#8203;(<a href="../Authenticator.AuthConfiguration.html" title="interface in org.eclipse.jetty.security">Authenticator.AuthConfiguration</a>&nbsp;configuration)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../Authenticator.html#setConfiguration(org.eclipse.jetty.security.Authenticator.AuthConfiguration)">Authenticator</a></code></span></div>
<div class="block">Configure the Authenticator</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../Authenticator.html#setConfiguration(org.eclipse.jetty.security.Authenticator.AuthConfiguration)">setConfiguration</a></code>&nbsp;in interface&nbsp;<code><a href="../Authenticator.html" title="interface in org.eclipse.jetty.security">Authenticator</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>configuration</code> - the configuration</dd>
</dl>
</li>
</ul>
<a id="getLoginService()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLoginService</h4>
<pre class="methodSignature">public&nbsp;<a href="../LoginService.html" title="interface in org.eclipse.jetty.security">LoginService</a>&nbsp;getLoginService()</pre>
</li>
</ul>
<a id="renewSession(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>renewSession</h4>
<pre class="methodSignature">protected&nbsp;javax.servlet.http.HttpSession&nbsp;renewSession&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request,
javax.servlet.http.HttpServletResponse&nbsp;response)</pre>
<div class="block">Change the session id.
The session is changed to a new instance with a new ID if and only if:<ul>
<li>A session exists.
<li>The <a href="../Authenticator.AuthConfiguration.html#isSessionRenewedOnAuthentication()"><code>Authenticator.AuthConfiguration.isSessionRenewedOnAuthentication()</code></a> returns true.
<li>The session ID has been given to unauthenticated responses
</ul></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - the request</dd>
<dd><code>response</code> - the response</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The new session.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LoginAuthenticator.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" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;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>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 1995&#x2013;2021 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>