<!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 (1.8.0_191) on Fri Dec 21 13:21:35 PST 2018 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>AbstractAuthenticationProvider (guacamole-ext 1.0.0 API)</title>
<meta name="date" content="2018-12-21">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="AbstractAuthenticationProvider (guacamole-ext 1.0.0 API)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":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";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<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/AbstractAuthenticationProvider.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/guacamole/net/auth/AbstractAuthenticatedUser.html" title="class in org.apache.guacamole.net.auth"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/guacamole/net/auth/AbstractConnection.html" title="class in org.apache.guacamole.net.auth"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html" target="_top">Frames</a></li>
<li><a href="AbstractAuthenticationProvider.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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><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>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&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.guacamole.net.auth</div>
<h2 title="Class AbstractAuthenticationProvider" class="title">Class AbstractAuthenticationProvider</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.guacamole.net.auth.AbstractAuthenticationProvider</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../../org/apache/guacamole/net/auth/simple/SimpleAuthenticationProvider.html" title="class in org.apache.guacamole.net.auth.simple">SimpleAuthenticationProvider</a></dd>
</dl>
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">AbstractAuthenticationProvider</span>
extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></pre>
<div class="block">Base implementation of AuthenticationProvider which provides default
 implementations of most functions. Implementations must provide their
 own <a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#getIdentifier--"><code>AuthenticationProvider.getIdentifier()</code></a>, but otherwise need only override an implemented
 function if they wish to actually implement the functionality defined for
 that function by the AuthenticationProvider interface.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#AbstractAuthenticationProvider--">AbstractAuthenticationProvider</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<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="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#authenticateUser-org.apache.guacamole.net.auth.Credentials-">authenticateUser</a></span>(<a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)</code>
<div class="block">Returns an AuthenticatedUser representing the user authenticated by the
 given credentials, if any.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#decorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">decorate</a></span>(<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;context,
        <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
        <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)</code>
<div class="block">Given a UserContext returned from getUserContext() of a different
 AuthenticationProvider, returns a UserContext instance which decorates
 (wraps) that UserContext, delegating and overriding implemented
 functions as necessary.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#getResource--">getResource</a></span>()</code>
<div class="block">Returns an arbitrary REST resource representing this
 AuthenticationProvider.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#getUserContext-org.apache.guacamole.net.auth.AuthenticatedUser-">getUserContext</a></span>(<a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser)</code>
<div class="block">Returns the UserContext of the user authenticated by the given
 credentials.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#redecorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">redecorate</a></span>(<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;decorated,
          <a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;context,
          <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
          <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)</code>
<div class="block">Given a UserContext returned by updateUserContext() of a different
 AuthenticationProvider, returns a UserContext instance which decorates
 (wraps) that UserContext, delegating and overriding implemented
 functions as necessary.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#shutdown--">shutdown</a></span>()</code>
<div class="block">Frees all resources associated with this AuthenticationProvider.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#updateAuthenticatedUser-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">updateAuthenticatedUser</a></span>(<a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
                       <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)</code>
<div class="block">Returns a new or updated AuthenticatedUser for the given credentials
 already having produced the given AuthenticatedUser.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#updateUserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">updateUserContext</a></span>(<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;context,
                 <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
                 <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)</code>
<div class="block">Returns a new or updated UserContext for the given AuthenticatedUser
 already having the given UserContext.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.guacamole.net.auth.AuthenticationProvider">
<!--   -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.guacamole.net.auth.<a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></h3>
<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#getIdentifier--">getIdentifier</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="AbstractAuthenticationProvider--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>AbstractAuthenticationProvider</h4>
<pre>public&nbsp;AbstractAuthenticationProvider()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="getResource--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getResource</h4>
<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;getResource()
                   throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Returns an arbitrary REST resource representing this
 AuthenticationProvider. The REST resource returned must be properly
 annotated with JSR-311 annotations, and may serve as the root resource
 for any number of subresources. The returned resource is ultimately
 exposed at ".../api/ext/IDENTIFIER/", where IDENTIFIER is the identifier
 of this AuthenticationProvider.

 REST resources returned by this function will be reachable by all users,
 regardless of whether they have authenticated. REST resources which
 must only be accessible by authenticated users should instead be returned
 from UserContext.getResource().

 <p>This implementation simply returns <code>null</code>. Implementations that
 wish to expose REST resources which are not specific to a user's session
 should override this function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#getResource--">getResource</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>An arbitrary REST resource, annotated with JSR-311 annotations, or
     null if no such resource is defined.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If the REST resource cannot be returned due to an error.</dd>
</dl>
</li>
</ul>
<a name="authenticateUser-org.apache.guacamole.net.auth.Credentials-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>authenticateUser</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticateUser(<a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)
                                   throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Returns an AuthenticatedUser representing the user authenticated by the
 given credentials, if any.

 <p>This implementation performs no authentication whatsoever, ignoring
 the provided <code>credentials</code> and simply returning <code>null</code>. Any
 authentication attempt will thus fall through to other
 <a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticationProvider</code></a> implementations, perhaps within other
 installed extensions, with this <code>AuthenticationProvider</code> making no
 claim regarding the user's identity nor whether the user should be
 allowed or disallowed from accessing Guacamole. Implementations that wish
 to authenticate users should override this function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#authenticateUser-org.apache.guacamole.net.auth.Credentials-">authenticateUser</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>credentials</code> - The credentials to use for authentication.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>An AuthenticatedUser representing the user authenticated by the
     given credentials, if any, or null if the credentials are invalid.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If an error occurs while authenticating the user, or if access is
     temporarily, permanently, or conditionally denied, such as if the
     supplied credentials are insufficient or invalid.</dd>
</dl>
</li>
</ul>
<a name="updateAuthenticatedUser-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>updateAuthenticatedUser</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;updateAuthenticatedUser(<a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
                                                 <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)
                                          throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Returns a new or updated AuthenticatedUser for the given credentials
 already having produced the given AuthenticatedUser. Note that because
 this function will be called for all future requests after initial
 authentication, including tunnel requests, care must be taken to avoid
 using functions of HttpServletRequest which invalidate the entire request
 body, such as getParameter(). Doing otherwise may cause the
 GuacamoleHTTPTunnelServlet to fail.

 <p>This implementation simply returns the provided
 <code>authenticatedUser</code> without modification. Implementations that
 wish to update a user's <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticatedUser</code></a> object with respect to
 new <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth"><code>Credentials</code></a> received in requests which follow the initial,
 successful authentication attempt should override this function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#updateAuthenticatedUser-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">updateAuthenticatedUser</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>authenticatedUser</code> - An AuthenticatedUser object representing the user authenticated by
     an arbitrary set of credentials. The AuthenticatedUser may come from
     this AuthenticationProvider or any other installed
     AuthenticationProvider.</dd>
<dd><code>credentials</code> - The credentials to use for authentication.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>An updated AuthenticatedUser representing the user authenticated by
     the given credentials, if any, or null if the credentials are
     invalid.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If an error occurs while updating the AuthenticatedUser.</dd>
</dl>
</li>
</ul>
<a name="getUserContext-org.apache.guacamole.net.auth.AuthenticatedUser-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getUserContext</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;getUserContext(<a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser)
                           throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Returns the UserContext of the user authenticated by the given
 credentials.

 <p>This implementation simply returns <code>null</code>, effectively allowing
 authentication to continue but refusing to provide data for the given
 user. Implementations that wish to veto the authentication results of
 other <a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticationProvider</code></a> implementations or provide data for
 authenticated users should override this function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#getUserContext-org.apache.guacamole.net.auth.AuthenticatedUser-">getUserContext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>authenticatedUser</code> - An AuthenticatedUser object representing the user authenticated by
     an arbitrary set of credentials. The AuthenticatedUser may come from
     this AuthenticationProvider or any other installed
     AuthenticationProvider.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A UserContext describing the permissions, connection, connection
     groups, etc. accessible or associated with the given authenticated
     user, or null if this AuthenticationProvider refuses to provide any
     such data.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If an error occurs while creating the UserContext.</dd>
</dl>
</li>
</ul>
<a name="updateUserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>updateUserContext</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;updateUserContext(<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;context,
                                     <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
                                     <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)
                              throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Returns a new or updated UserContext for the given AuthenticatedUser
 already having the given UserContext. Note that because this function
 will be called for all future requests after initial authentication,
 including tunnel requests, care must be taken to avoid using functions
 of HttpServletRequest which invalidate the entire request body, such as
 getParameter(). Doing otherwise may cause the GuacamoleHTTPTunnelServlet
 to fail.

 <p>This implementation simply returns the provided <code>context</code>
 without modification. Implementations that wish to update a user's
 <a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth"><code>UserContext</code></a> object with respect to newly-updated
 <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticatedUser</code></a> or <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth"><code>Credentials</code></a> (such as those received
 in requests which follow the initial, successful authentication attempt)
 should override this function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#updateUserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">updateUserContext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - The existing UserContext belonging to the user in question.</dd>
<dd><code>authenticatedUser</code> - An AuthenticatedUser object representing the user authenticated by
     an arbitrary set of credentials. The AuthenticatedUser may come from
     this AuthenticationProvider or any other installed
     AuthenticationProvider.</dd>
<dd><code>credentials</code> - The credentials which were most recently submitted. These are not
     guaranteed to be the same as the credentials associated with the
     AuthenticatedUser when they originally authenticated.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>An updated UserContext describing the permissions, connection,
     connection groups, etc. accessible or associated with the given
     authenticated user, or null if this AuthenticationProvider refuses
     to provide any such data.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If an error occurs while updating the UserContext.</dd>
</dl>
</li>
</ul>
<a name="decorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>decorate</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;decorate(<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;context,
                            <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
                            <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)
                     throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Given a UserContext returned from getUserContext() of a different
 AuthenticationProvider, returns a UserContext instance which decorates
 (wraps) that UserContext, delegating and overriding implemented
 functions as necessary. Each UserContext created via getUserContext()
 will be passed to the decorate() functions of all other
 AuthenticationProviders, allowing those AuthenticationProviders to
 augment (or perhaps even limit) the functionality or data provided.

 <p>This implementation simply returns the provided <code>context</code>
 without performing any decoration. Implementations that wish to augment
 the functionality or data provided by other
 <a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticationProvider</code></a> implementations should override this
 function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#decorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">decorate</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - An existing UserContext generated by getUserContext() of a different
     AuthenticationProvider.</dd>
<dd><code>authenticatedUser</code> - The AuthenticatedUser object representing the user associated with
     the given UserContext.</dd>
<dd><code>credentials</code> - The credentials which were most recently submitted for the given
     AuthenticatedUser. These are not guaranteed to be the same as the
     credentials associated with the AuthenticatedUser object, which are
     the credentials provided when the user originally authenticated.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A decorated (wrapped) UserContext object, or the original,
     undecorated UserContext.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If the UserContext cannot be decorated due to an error.</dd>
</dl>
</li>
</ul>
<a name="redecorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>redecorate</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;redecorate(<a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;decorated,
                              <a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth">UserContext</a>&nbsp;context,
                              <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth">AuthenticatedUser</a>&nbsp;authenticatedUser,
                              <a href="../../../../../org/apache/guacamole/net/auth/Credentials.html" title="class in org.apache.guacamole.net.auth">Credentials</a>&nbsp;credentials)
                       throws org.apache.guacamole.GuacamoleException</pre>
<div class="block">Given a UserContext returned by updateUserContext() of a different
 AuthenticationProvider, returns a UserContext instance which decorates
 (wraps) that UserContext, delegating and overriding implemented
 functions as necessary. Each UserContext created via updateUserContext()
 will be passed to the decorate() functions of all other
 AuthenticationProviders, allowing those AuthenticationProviders to
 augment (or perhaps even limit) the functionality or data provided.

 <p>This implementation simply invokes
 <a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#decorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-"><code>decorate(UserContext,AuthenticatedUser,Credentials)</code></a> with the
 provided <code>context</code>, <code>authenticatedUser</code>, and
 <code>credentials</code>. Implementations which override
 <a href="../../../../../org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html#decorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-"><code>decorate(UserContext,AuthenticatedUser,Credentials)</code></a> and which
 need to update their existing decorated object following possible
 updates to the <a href="../../../../../org/apache/guacamole/net/auth/UserContext.html" title="interface in org.apache.guacamole.net.auth"><code>UserContext</code></a> or <a href="../../../../../org/apache/guacamole/net/auth/AuthenticatedUser.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticatedUser</code></a> (rather
 than generate an entirely new decorated object) should override this
 function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#redecorate-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.UserContext-org.apache.guacamole.net.auth.AuthenticatedUser-org.apache.guacamole.net.auth.Credentials-">redecorate</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>decorated</code> - The UserContext returned when decorate() was invoked on this
     AuthenticationProvider for the UserContext which was just updated
     via a call to updateUserContext().</dd>
<dd><code>context</code> - An existing UserContext generated by updateUserContext() of a
     different AuthenticationProvider.</dd>
<dd><code>authenticatedUser</code> - The AuthenticatedUser object representing the user associated with
     the given UserContext.</dd>
<dd><code>credentials</code> - The credentials which were most recently submitted for the given
     AuthenticatedUser. These are not guaranteed to be the same as the
     credentials associated with the AuthenticatedUser object, which are
     the credentials provided when the user originally authenticated.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A decorated (wrapped) UserContext object, or the original,
     undecorated UserContext.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.apache.guacamole.GuacamoleException</code> - If the UserContext cannot be decorated due to an error.</dd>
</dl>
</li>
</ul>
<a name="shutdown--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>shutdown</h4>
<pre>public&nbsp;void&nbsp;shutdown()</pre>
<div class="block">Frees all resources associated with this AuthenticationProvider. This
 function will be automatically invoked when the Guacamole server is
 shutting down.

 <p>This implementation does nothing. Implementations that wish to perform
 cleanup tasks when the <a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth"><code>AuthenticationProvider</code></a> is being unloaded
 should override this function.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html#shutdown--">shutdown</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/guacamole/net/auth/AuthenticationProvider.html" title="interface in org.apache.guacamole.net.auth">AuthenticationProvider</a></code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<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/AbstractAuthenticationProvider.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/guacamole/net/auth/AbstractAuthenticatedUser.html" title="class in org.apache.guacamole.net.auth"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/guacamole/net/auth/AbstractConnection.html" title="class in org.apache.guacamole.net.auth"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html" target="_top">Frames</a></li>
<li><a href="AbstractAuthenticationProvider.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.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>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&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>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&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; 2018. All rights reserved.</small></p>
        <!-- Google Analytics -->
        <script type="text/javascript">
          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
          (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
          })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

          ga('create', 'UA-75289145-1', 'auto');
          ga('send', 'pageview');
        </script>
</body>
</html>
