= ImpersonatedUserHolder
:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Used by the framework's default implementation of xref:refguide:applib:index/services/user/UserService.adoc[UserService] to allow the current user to be temporarily impersonated.

The intention is that viewers provide an implementation of this service. Note that the Wicket viewer _does_ implement this service and uses an _javax.servlet.http.HttpSession_ ; this will have the side-effect

== API

[source,java]
.ImpersonatedUserHolder.java
----
interface ImpersonatedUserHolder {
  boolean supportsImpersonation()     // <.>
  void setUserMemento(UserMemento userMemento)     // <.>
  Optional<UserMemento> getUserMemento()
  void clearUserMemento()
}
----

<.> xref:#supportsImpersonation_[supportsImpersonation()]
+
--
Whether or not this implementation supports impersonation.
--
<.> xref:#setUserMemento_UserMemento[setUserMemento(UserMemento)]
+
--
Sets the user memento to be impersonated.
--

== Members

[#supportsImpersonation_]
=== supportsImpersonation()

Whether or not this implementation supports impersonation.

If it does _not_ , then _#setUserMemento(UserMemento)_ is expected/required to throw an exception. throw

[#setUserMemento_UserMemento]
=== setUserMemento(UserMemento)

Sets the user memento to be impersonated.
