<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>Deprecated List (Apache Shiro :: Core 1.12.0 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="jquery/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="jquery-ui.overrides.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.6.0.min.js"></script>
<script type="text/javascript" src="jquery/jquery-ui.min.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="Deprecated List (Apache Shiro :: Core 1.12.0 API)";
        }
    }
    catch(err) {
    }
//-->
var pathtoroot = "./";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav"><!-- Matomo --> <script>   var _paq = window._paq = window._paq || [];   /* tracker methods like "setCustomDimension" should be called before "trackPageView" */   /* We explicitly disable cookie tracking to avoid privacy issues */   _paq.push(['disableCookies']);   _paq.push(['trackPageView']);   _paq.push(['enableLinkTracking']);   (function() {     var u="//matomo.privacy.apache.org/";     _paq.push(['setTrackerUrl', u+'matomo.php']);     _paq.push(['setSiteId', '2']);     var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];     g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);   })(); </script> <!-- End Matomo Code -->
<!-- ========= 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>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li class="navBarCell1Rev">Deprecated</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>
<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>
<main role="main">
<div class="header">
<h1 title="Deprecated API" class="title">Deprecated API</h1>
<h2 title="Contents">Contents</h2>
<ul>
<li><a href="#class">Classes</a></li>
<li><a href="#method">Methods</a></li>
<li><a href="#constructor">Constructors</a></li>
</ul>
</div>
<div class="contentContainer"><a id="class">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<table class="deprecatedSummary">
<caption><span>Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/Md2CredentialsMatcher.html" title="class in org.apache.shiro.authc.credential">org.apache.shiro.authc.credential.Md2CredentialsMatcher</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.1 - use the HashedCredentialsMatcher directly and set its
             <a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashAlgorithmName(java.lang.String)"><code>hashAlgorithmName</code></a> property.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/Md5CredentialsMatcher.html" title="class in org.apache.shiro.authc.credential">org.apache.shiro.authc.credential.Md5CredentialsMatcher</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.1 - use the HashedCredentialsMatcher directly and set its
             <a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashAlgorithmName(java.lang.String)"><code>hashAlgorithmName</code></a> property.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/Sha1CredentialsMatcher.html" title="class in org.apache.shiro.authc.credential">org.apache.shiro.authc.credential.Sha1CredentialsMatcher</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.1 - use the HashedCredentialsMatcher directly and set its
             <a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashAlgorithmName(java.lang.String)"><code>hashAlgorithmName</code></a> property.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/Sha256CredentialsMatcher.html" title="class in org.apache.shiro.authc.credential">org.apache.shiro.authc.credential.Sha256CredentialsMatcher</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.1 - use the HashedCredentialsMatcher directly and set its
             <a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashAlgorithmName(java.lang.String)"><code>hashAlgorithmName</code></a> property.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/Sha384CredentialsMatcher.html" title="class in org.apache.shiro.authc.credential">org.apache.shiro.authc.credential.Sha384CredentialsMatcher</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.1 - use the HashedCredentialsMatcher directly and set its
             <a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashAlgorithmName(java.lang.String)"><code>hashAlgorithmName</code></a> property.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/Sha512CredentialsMatcher.html" title="class in org.apache.shiro.authc.credential">org.apache.shiro.authc.credential.Sha512CredentialsMatcher</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.1 - use the HashedCredentialsMatcher directly and set its
             <a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashAlgorithmName(java.lang.String)"><code>hashAlgorithmName</code></a> property.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/config/IniFactorySupport.html" title="class in org.apache.shiro.config">org.apache.shiro.config.IniFactorySupport</a></th>
<td class="colLast">
<div class="deprecationComment">use Shiro's <code>Environment</code> mechanisms instead.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/config/IniSecurityManagerFactory.html" title="class in org.apache.shiro.config">org.apache.shiro.config.IniSecurityManagerFactory</a></th>
<td class="colLast">
<div class="deprecationComment">use Shiro's <code>Environment</code> mechanisms instead.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/realm/ldap/DefaultLdapContextFactory.html" title="class in org.apache.shiro.realm.ldap">org.apache.shiro.realm.ldap.DefaultLdapContextFactory</a></th>
<td class="colLast">
<div class="deprecationComment">replaced by the <a href="org/apache/shiro/realm/ldap/JndiLdapContextFactory.html" title="class in org.apache.shiro.realm.ldap"><code>JndiLdapContextFactory</code></a> implementation.  This implementation will be removed
 prior to Shiro 2.0</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/realm/ldap/JndiLdapRealm.html" title="class in org.apache.shiro.realm.ldap">org.apache.shiro.realm.ldap.JndiLdapRealm</a></th>
<td class="colLast">
<div class="deprecationComment">Renamed to <a href="org/apache/shiro/realm/ldap/DefaultLdapRealm.html" title="class in org.apache.shiro.realm.ldap"><code>DefaultLdapRealm</code></a>, this class will be removed prior to 2.0</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/util/JavaEnvironment.html" title="class in org.apache.shiro.util">org.apache.shiro.util.JavaEnvironment</a></th>
<td class="colLast">
<div class="deprecationComment">This class is no longer used in Shiro and will be removed in the next major version.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
<a id="method">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<table class="deprecatedSummary">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#getSalt(org.apache.shiro.authc.AuthenticationToken)">org.apache.shiro.authc.credential.HashedCredentialsMatcher.getSalt&#8203;(AuthenticationToken)</a></th>
<td class="colLast">
<div class="deprecationComment">since Shiro 1.1.  Hash salting is now expected to be based on if the <a href="org/apache/shiro/authc/AuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>AuthenticationInfo</code></a>
             returned from the <code>Realm</code> is a <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>SaltedAuthenticationInfo</code></a> instance and its
             <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html#getCredentialsSalt()"><code>getCredentialsSalt()</code></a> method returns a non-null value.
             This method and the 1.0 behavior still exists for backwards compatibility if the <code>Realm</code> does not return
             <code>SaltedAuthenticationInfo</code> instances, but <b>it is highly recommended that <code>Realm</code> implementations
             that support hashed credentials start returning <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>SaltedAuthenticationInfo</code></a>
             instances as soon as possible</b>.<p/>
             This is because salts should always be obtained from the stored account information and
             never be interpreted based on user/Subject-entered data.  User-entered data is easier to compromise for
             attackers, whereas account-unique (and secure randomly-generated) salts never disseminated to the end-user
             are almost impossible to break.  This method will be removed in Shiro 2.0.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#isHashSalted()">org.apache.shiro.authc.credential.HashedCredentialsMatcher.isHashSalted()</a></th>
<td class="colLast">
<div class="deprecationComment">since Shiro 1.1.  Hash salting is now expected to be based on if the <a href="org/apache/shiro/authc/AuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>AuthenticationInfo</code></a>
             returned from the <code>Realm</code> is a <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>SaltedAuthenticationInfo</code></a> instance and its
             <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html#getCredentialsSalt()"><code>getCredentialsSalt()</code></a> method returns a non-null value.
             This method and the 1.0 behavior still exists for backwards compatibility if the <code>Realm</code> does not return
             <code>SaltedAuthenticationInfo</code> instances, but <b>it is highly recommended that <code>Realm</code> implementations
             that support hashed credentials start returning <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>SaltedAuthenticationInfo</code></a>
             instances as soon as possible</b>.
             <p/>
             This is because salts should always be obtained from the stored account information and
             never be interpreted based on user/Subject-entered data.  User-entered data is easier to compromise for
             attackers, whereas account-unique (and secure randomly-generated) salts never disseminated to the end-user
             are almost impossible to break.  This method will be removed in Shiro 2.0.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/authc/credential/HashedCredentialsMatcher.html#setHashSalted(boolean)">org.apache.shiro.authc.credential.HashedCredentialsMatcher.setHashSalted&#8203;(boolean)</a></th>
<td class="colLast">
<div class="deprecationComment">since Shiro 1.1.  Hash salting is now expected to be based on if the <a href="org/apache/shiro/authc/AuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>AuthenticationInfo</code></a>
             returned from the <code>Realm</code> is a <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>SaltedAuthenticationInfo</code></a> instance and its
             <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html#getCredentialsSalt()"><code>getCredentialsSalt()</code></a> method returns a non-null value.
             This method and the 1.0 behavior still exists for backwards compatibility if the <code>Realm</code> does not return
             <code>SaltedAuthenticationInfo</code> instances, but <b>it is highly recommended that <code>Realm</code> implementations
             that support hashed credentials start returning <a href="org/apache/shiro/authc/SaltedAuthenticationInfo.html" title="interface in org.apache.shiro.authc"><code>SaltedAuthenticationInfo</code></a>
             instances as soon as possible</b>.
             <p/>
             This is because salts should always be obtained from the stored account information and
             never be interpreted based on user/Subject-entered data.  User-entered data is easier to compromise for
             attackers, whereas account-unique (and secure randomly-generated) salts never disseminated to the end-user
             are almost impossible to break.  This method will be removed in Shiro 2.0.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/mgt/DefaultSecurityManager.html#bind(org.apache.shiro.subject.Subject)">org.apache.shiro.mgt.DefaultSecurityManager.bind&#8203;(Subject)</a></th>
<td class="colLast">
<div class="deprecationComment">in favor of <a href="org/apache/shiro/mgt/DefaultSecurityManager.html#save(org.apache.shiro.subject.Subject)"><code>save(subject)</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/mgt/DefaultSecurityManager.html#unbind(org.apache.shiro.subject.Subject)">org.apache.shiro.mgt.DefaultSecurityManager.unbind&#8203;(Subject)</a></th>
<td class="colLast">
<div class="deprecationComment">in Shiro 1.2 in favor of <a href="org/apache/shiro/mgt/DefaultSecurityManager.html#delete(org.apache.shiro.subject.Subject)"><code>DefaultSecurityManager.delete(org.apache.shiro.subject.Subject)</code></a></div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/mgt/DefaultSubjectFactory.html#newSubjectInstance(org.apache.shiro.subject.PrincipalCollection,boolean,java.lang.String,org.apache.shiro.session.Session,org.apache.shiro.mgt.SecurityManager)">org.apache.shiro.mgt.DefaultSubjectFactory.newSubjectInstance&#8203;(PrincipalCollection, boolean, String, Session, SecurityManager)</a></th>
<td class="colLast">
<div class="deprecationComment">since 1.2 - override <a href="org/apache/shiro/mgt/DefaultSubjectFactory.html#createSubject(org.apache.shiro.subject.SubjectContext)"><code>DefaultSubjectFactory.createSubject(org.apache.shiro.subject.SubjectContext)</code></a> directly if you
             need to instantiate a custom <a href="org/apache/shiro/subject/Subject.html" title="interface in org.apache.shiro.subject"><code>Subject</code></a> class.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/realm/ldap/DefaultLdapContextFactory.html#getLdapContext(java.lang.String,java.lang.String)">org.apache.shiro.realm.ldap.DefaultLdapContextFactory.getLdapContext&#8203;(String, String)</a></th>
<td class="colLast">
<div class="deprecationComment">the <a href="org/apache/shiro/realm/ldap/DefaultLdapContextFactory.html#getLdapContext(java.lang.Object,java.lang.Object)"><code>DefaultLdapContextFactory.getLdapContext(Object, Object)</code></a> method should be used in all cases to ensure more than
             String principals and credentials can be used.  Shiro no longer calls this method - it will be
             removed before the 2.0 release.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/realm/ldap/DefaultLdapContextFactory.html#setSearchBase(java.lang.String)">org.apache.shiro.realm.ldap.DefaultLdapContextFactory.setSearchBase&#8203;(String)</a></th>
<td class="colLast">
<div class="deprecationComment">this attribute existed, but was never used in Shiro 1.x.  It will be removed prior to Shiro 2.0.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/realm/ldap/JndiLdapContextFactory.html#getLdapContext(java.lang.String,java.lang.String)">org.apache.shiro.realm.ldap.JndiLdapContextFactory.getLdapContext&#8203;(String, String)</a></th>
<td class="colLast">
<div class="deprecationComment">the <a href="org/apache/shiro/realm/ldap/JndiLdapContextFactory.html#getLdapContext(java.lang.Object,java.lang.Object)"><code>JndiLdapContextFactory.getLdapContext(Object, Object)</code></a> method should be used in all cases to ensure more than
             String principals and credentials can be used.  Shiro no longer calls this method - it will be
             removed before the 2.0 release.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/realm/ldap/LdapContextFactory.html#getLdapContext(java.lang.String,java.lang.String)">org.apache.shiro.realm.ldap.LdapContextFactory.getLdapContext&#8203;(String, String)</a></th>
<td class="colLast">
<div class="deprecationComment">the <a href="org/apache/shiro/realm/ldap/LdapContextFactory.html#getLdapContext(java.lang.Object,java.lang.Object)"><code>LdapContextFactory.getLdapContext(Object, Object)</code></a> method should be used in all cases to ensure more than
 String principals and credentials can be used.</div>
</td>
</tr>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/util/CollectionUtils.html#isEmpty(org.apache.shiro.subject.PrincipalCollection)">org.apache.shiro.util.CollectionUtils.isEmpty&#8203;(PrincipalCollection)</a></th>
<td class="colLast">
<div class="deprecationComment">Use PrincipalCollection.isEmpty() directly.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
<a id="constructor">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<table class="deprecatedSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<th class="colDeprecatedItemName" scope="row"><a href="org/apache/shiro/UnavailableSecurityManagerException.html#%3Cinit%3E(java.lang.String,java.lang.Throwable)">org.apache.shiro.UnavailableSecurityManagerException&#8203;(String, Throwable)</a></th>
<td class="colLast">
<div class="deprecationComment">This constructor is NOT used by Shiro directly, and will be removed in the future.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
</main>
<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>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li class="navBarCell1Rev">Deprecated</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>
<a id="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2004&#x2013;2023 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>
