<!DOCTYPE HTML>
<html lang="fr">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.authc;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.authz.Permission;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.authz.SimpleAuthorizationInfo;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.subject.PrincipalCollection;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.subject.SimplePrincipalCollection;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.util.ByteSource;</a>
<span class="sourceLineNo">026</span><a id="line.26"></a>
<span class="sourceLineNo">027</span><a id="line.27">import java.io.Serializable;</a>
<span class="sourceLineNo">028</span><a id="line.28">import java.util.Collection;</a>
<span class="sourceLineNo">029</span><a id="line.29">import java.util.Set;</a>
<span class="sourceLineNo">030</span><a id="line.30"></a>
<span class="sourceLineNo">031</span><a id="line.31"></a>
<span class="sourceLineNo">032</span><a id="line.32">/**</a>
<span class="sourceLineNo">033</span><a id="line.33"> * Simple implementation of the {@link org.apache.shiro.authc.Account} interface that</a>
<span class="sourceLineNo">034</span><a id="line.34"> * contains principal and credential and authorization information (roles and permissions) as instance variables and</a>
<span class="sourceLineNo">035</span><a id="line.35"> * exposes them via getters and setters using standard JavaBean notation.</a>
<span class="sourceLineNo">036</span><a id="line.36"> *</a>
<span class="sourceLineNo">037</span><a id="line.37"> * @since 0.1</a>
<span class="sourceLineNo">038</span><a id="line.38"> */</a>
<span class="sourceLineNo">039</span><a id="line.39">public class SimpleAccount implements Account, MergableAuthenticationInfo, SaltedAuthenticationInfo, Serializable {</a>
<span class="sourceLineNo">040</span><a id="line.40"></a>
<span class="sourceLineNo">041</span><a id="line.41">    /*--------------------------------------------</a>
<span class="sourceLineNo">042</span><a id="line.42">    |    I N S T A N C E   V A R I A B L E S    |</a>
<span class="sourceLineNo">043</span><a id="line.43">    ============================================*/</a>
<span class="sourceLineNo">044</span><a id="line.44">    /**</a>
<span class="sourceLineNo">045</span><a id="line.45">     * The authentication information (principals and credentials) for this account.</a>
<span class="sourceLineNo">046</span><a id="line.46">     */</a>
<span class="sourceLineNo">047</span><a id="line.47">    private SimpleAuthenticationInfo authcInfo;</a>
<span class="sourceLineNo">048</span><a id="line.48"></a>
<span class="sourceLineNo">049</span><a id="line.49">    /**</a>
<span class="sourceLineNo">050</span><a id="line.50">     * The authorization information for this account.</a>
<span class="sourceLineNo">051</span><a id="line.51">     */</a>
<span class="sourceLineNo">052</span><a id="line.52">    private SimpleAuthorizationInfo authzInfo;</a>
<span class="sourceLineNo">053</span><a id="line.53"></a>
<span class="sourceLineNo">054</span><a id="line.54">    /**</a>
<span class="sourceLineNo">055</span><a id="line.55">     * Indicates this account is locked.  This isn't honored by all &lt;tt&gt;Realms&lt;/tt&gt; but is honored by</a>
<span class="sourceLineNo">056</span><a id="line.56">     * {@link org.apache.shiro.realm.SimpleAccountRealm}.</a>
<span class="sourceLineNo">057</span><a id="line.57">     */</a>
<span class="sourceLineNo">058</span><a id="line.58">    private boolean locked;</a>
<span class="sourceLineNo">059</span><a id="line.59"></a>
<span class="sourceLineNo">060</span><a id="line.60">    /**</a>
<span class="sourceLineNo">061</span><a id="line.61">     * Indicates credentials on this account are expired.  This isn't honored by all &lt;tt&gt;Realms&lt;/tt&gt; but is honored by</a>
<span class="sourceLineNo">062</span><a id="line.62">     * {@link org.apache.shiro.realm.SimpleAccountRealm}.</a>
<span class="sourceLineNo">063</span><a id="line.63">     */</a>
<span class="sourceLineNo">064</span><a id="line.64">    private boolean credentialsExpired;</a>
<span class="sourceLineNo">065</span><a id="line.65"></a>
<span class="sourceLineNo">066</span><a id="line.66">    /*--------------------------------------------</a>
<span class="sourceLineNo">067</span><a id="line.67">    |         C O N S T R U C T O R S           |</a>
<span class="sourceLineNo">068</span><a id="line.68">    ============================================*/</a>
<span class="sourceLineNo">069</span><a id="line.69"></a>
<span class="sourceLineNo">070</span><a id="line.70">    /**</a>
<span class="sourceLineNo">071</span><a id="line.71">     * Default no-argument constructor.</a>
<span class="sourceLineNo">072</span><a id="line.72">     */</a>
<span class="sourceLineNo">073</span><a id="line.73">    public SimpleAccount() {</a>
<span class="sourceLineNo">074</span><a id="line.74">    }</a>
<span class="sourceLineNo">075</span><a id="line.75"></a>
<span class="sourceLineNo">076</span><a id="line.76">    /**</a>
<span class="sourceLineNo">077</span><a id="line.77">     * Constructs a SimpleAccount instance for the specified realm with the given principals and credentials.</a>
<span class="sourceLineNo">078</span><a id="line.78">     *</a>
<span class="sourceLineNo">079</span><a id="line.79">     * @param principal   the 'primary' identifying attribute of the account, for example, a user id or username.</a>
<span class="sourceLineNo">080</span><a id="line.80">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">081</span><a id="line.81">     * @param realmName   the name of the realm that accesses this account data</a>
<span class="sourceLineNo">082</span><a id="line.82">     */</a>
<span class="sourceLineNo">083</span><a id="line.83">    public SimpleAccount(Object principal, Object credentials, String realmName) {</a>
<span class="sourceLineNo">084</span><a id="line.84">        this(principal instanceof PrincipalCollection ? (PrincipalCollection) principal : new SimplePrincipalCollection(principal, realmName), credentials);</a>
<span class="sourceLineNo">085</span><a id="line.85">    }</a>
<span class="sourceLineNo">086</span><a id="line.86"></a>
<span class="sourceLineNo">087</span><a id="line.87">    /**</a>
<span class="sourceLineNo">088</span><a id="line.88">     * Constructs a SimpleAccount instance for the specified realm with the given principals, hashedCredentials and</a>
<span class="sourceLineNo">089</span><a id="line.89">     * credentials salt used when hashing the credentials.</a>
<span class="sourceLineNo">090</span><a id="line.90">     *</a>
<span class="sourceLineNo">091</span><a id="line.91">     * @param principal         the 'primary' identifying attribute of the account, for example, a user id or username.</a>
<span class="sourceLineNo">092</span><a id="line.92">     * @param hashedCredentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">093</span><a id="line.93">     * @param credentialsSalt   the salt used when hashing the credentials</a>
<span class="sourceLineNo">094</span><a id="line.94">     * @param realmName         the name of the realm that accesses this account data</a>
<span class="sourceLineNo">095</span><a id="line.95">     * @see org.apache.shiro.authc.credential.HashedCredentialsMatcher HashedCredentialsMatcher</a>
<span class="sourceLineNo">096</span><a id="line.96">     * @since 1.1</a>
<span class="sourceLineNo">097</span><a id="line.97">     */</a>
<span class="sourceLineNo">098</span><a id="line.98">    public SimpleAccount(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName) {</a>
<span class="sourceLineNo">099</span><a id="line.99">        this(principal instanceof PrincipalCollection ? (PrincipalCollection) principal : new SimplePrincipalCollection(principal, realmName),</a>
<span class="sourceLineNo">100</span><a id="line.100">                hashedCredentials, credentialsSalt);</a>
<span class="sourceLineNo">101</span><a id="line.101">    }</a>
<span class="sourceLineNo">102</span><a id="line.102"></a>
<span class="sourceLineNo">103</span><a id="line.103">    /**</a>
<span class="sourceLineNo">104</span><a id="line.104">     * Constructs a SimpleAccount instance for the specified realm with the given principals and credentials.</a>
<span class="sourceLineNo">105</span><a id="line.105">     *</a>
<span class="sourceLineNo">106</span><a id="line.106">     * @param principals  the identifying attributes of the account, at least one of which should be considered the</a>
<span class="sourceLineNo">107</span><a id="line.107">     *                    account's 'primary' identifying attribute, for example, a user id or username.</a>
<span class="sourceLineNo">108</span><a id="line.108">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">109</span><a id="line.109">     * @param realmName   the name of the realm that accesses this account data</a>
<span class="sourceLineNo">110</span><a id="line.110">     */</a>
<span class="sourceLineNo">111</span><a id="line.111">    public SimpleAccount(Collection principals, Object credentials, String realmName) {</a>
<span class="sourceLineNo">112</span><a id="line.112">        this(new SimplePrincipalCollection(principals, realmName), credentials);</a>
<span class="sourceLineNo">113</span><a id="line.113">    }</a>
<span class="sourceLineNo">114</span><a id="line.114"></a>
<span class="sourceLineNo">115</span><a id="line.115">    /**</a>
<span class="sourceLineNo">116</span><a id="line.116">     * Constructs a SimpleAccount instance for the specified principals and credentials.</a>
<span class="sourceLineNo">117</span><a id="line.117">     *</a>
<span class="sourceLineNo">118</span><a id="line.118">     * @param principals  the identifying attributes of the account, at least one of which should be considered the</a>
<span class="sourceLineNo">119</span><a id="line.119">     *                    account's 'primary' identifying attribute, for example, a user id or username.</a>
<span class="sourceLineNo">120</span><a id="line.120">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">121</span><a id="line.121">     */</a>
<span class="sourceLineNo">122</span><a id="line.122">    public SimpleAccount(PrincipalCollection principals, Object credentials) {</a>
<span class="sourceLineNo">123</span><a id="line.123">        this.authcInfo = new SimpleAuthenticationInfo(principals, credentials);</a>
<span class="sourceLineNo">124</span><a id="line.124">        this.authzInfo = new SimpleAuthorizationInfo();</a>
<span class="sourceLineNo">125</span><a id="line.125">    }</a>
<span class="sourceLineNo">126</span><a id="line.126"></a>
<span class="sourceLineNo">127</span><a id="line.127">    /**</a>
<span class="sourceLineNo">128</span><a id="line.128">     * Constructs a SimpleAccount instance for the specified principals and credentials.</a>
<span class="sourceLineNo">129</span><a id="line.129">     *</a>
<span class="sourceLineNo">130</span><a id="line.130">     * @param principals        the identifying attributes of the account, at least one of which should be considered the</a>
<span class="sourceLineNo">131</span><a id="line.131">     *                          account's 'primary' identifying attribute, for example, a user id or username.</a>
<span class="sourceLineNo">132</span><a id="line.132">     * @param hashedCredentials the hashed credentials that verify identity for the account</a>
<span class="sourceLineNo">133</span><a id="line.133">     * @param credentialsSalt   the salt used when hashing the credentials</a>
<span class="sourceLineNo">134</span><a id="line.134">     * @see org.apache.shiro.authc.credential.HashedCredentialsMatcher HashedCredentialsMatcher</a>
<span class="sourceLineNo">135</span><a id="line.135">     * @since 1.1</a>
<span class="sourceLineNo">136</span><a id="line.136">     */</a>
<span class="sourceLineNo">137</span><a id="line.137">    public SimpleAccount(PrincipalCollection principals, Object hashedCredentials, ByteSource credentialsSalt) {</a>
<span class="sourceLineNo">138</span><a id="line.138">        this.authcInfo = new SimpleAuthenticationInfo(principals, hashedCredentials, credentialsSalt);</a>
<span class="sourceLineNo">139</span><a id="line.139">        this.authzInfo = new SimpleAuthorizationInfo();</a>
<span class="sourceLineNo">140</span><a id="line.140">    }</a>
<span class="sourceLineNo">141</span><a id="line.141"></a>
<span class="sourceLineNo">142</span><a id="line.142">    /**</a>
<span class="sourceLineNo">143</span><a id="line.143">     * Constructs a SimpleAccount instance for the specified principals and credentials, with the assigned roles.</a>
<span class="sourceLineNo">144</span><a id="line.144">     *</a>
<span class="sourceLineNo">145</span><a id="line.145">     * @param principals  the identifying attributes of the account, at least one of which should be considered the</a>
<span class="sourceLineNo">146</span><a id="line.146">     *                    account's 'primary' identifying attribute, for example, a user id or username.</a>
<span class="sourceLineNo">147</span><a id="line.147">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">148</span><a id="line.148">     * @param roles       the names of the roles assigned to this account.</a>
<span class="sourceLineNo">149</span><a id="line.149">     */</a>
<span class="sourceLineNo">150</span><a id="line.150">    public SimpleAccount(PrincipalCollection principals, Object credentials, Set&lt;String&gt; roles) {</a>
<span class="sourceLineNo">151</span><a id="line.151">        this.authcInfo = new SimpleAuthenticationInfo(principals, credentials);</a>
<span class="sourceLineNo">152</span><a id="line.152">        this.authzInfo = new SimpleAuthorizationInfo(roles);</a>
<span class="sourceLineNo">153</span><a id="line.153">    }</a>
<span class="sourceLineNo">154</span><a id="line.154"></a>
<span class="sourceLineNo">155</span><a id="line.155">    /**</a>
<span class="sourceLineNo">156</span><a id="line.156">     * Constructs a SimpleAccount instance for the specified realm with the given principal and credentials, with the</a>
<span class="sourceLineNo">157</span><a id="line.157">     * the assigned roles and permissions.</a>
<span class="sourceLineNo">158</span><a id="line.158">     *</a>
<span class="sourceLineNo">159</span><a id="line.159">     * @param principal   the 'primary' identifying attributes of the account, for example, a user id or username.</a>
<span class="sourceLineNo">160</span><a id="line.160">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">161</span><a id="line.161">     * @param realmName   the name of the realm that accesses this account data</a>
<span class="sourceLineNo">162</span><a id="line.162">     * @param roleNames   the names of the roles assigned to this account.</a>
<span class="sourceLineNo">163</span><a id="line.163">     * @param permissions the permissions assigned to this account directly (not those assigned to any of the realms).</a>
<span class="sourceLineNo">164</span><a id="line.164">     */</a>
<span class="sourceLineNo">165</span><a id="line.165">    public SimpleAccount(Object principal, Object credentials, String realmName, Set&lt;String&gt; roleNames, Set&lt;Permission&gt; permissions) {</a>
<span class="sourceLineNo">166</span><a id="line.166">        this.authcInfo = new SimpleAuthenticationInfo(new SimplePrincipalCollection(principal, realmName), credentials);</a>
<span class="sourceLineNo">167</span><a id="line.167">        this.authzInfo = new SimpleAuthorizationInfo(roleNames);</a>
<span class="sourceLineNo">168</span><a id="line.168">        this.authzInfo.setObjectPermissions(permissions);</a>
<span class="sourceLineNo">169</span><a id="line.169">    }</a>
<span class="sourceLineNo">170</span><a id="line.170"></a>
<span class="sourceLineNo">171</span><a id="line.171">    /**</a>
<span class="sourceLineNo">172</span><a id="line.172">     * Constructs a SimpleAccount instance for the specified realm with the given principals and credentials, with the</a>
<span class="sourceLineNo">173</span><a id="line.173">     * the assigned roles and permissions.</a>
<span class="sourceLineNo">174</span><a id="line.174">     *</a>
<span class="sourceLineNo">175</span><a id="line.175">     * @param principals  the identifying attributes of the account, at least one of which should be considered the</a>
<span class="sourceLineNo">176</span><a id="line.176">     *                    account's 'primary' identifying attribute, for example, a user id or username.</a>
<span class="sourceLineNo">177</span><a id="line.177">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">178</span><a id="line.178">     * @param realmName   the name of the realm that accesses this account data</a>
<span class="sourceLineNo">179</span><a id="line.179">     * @param roleNames   the names of the roles assigned to this account.</a>
<span class="sourceLineNo">180</span><a id="line.180">     * @param permissions the permissions assigned to this account directly (not those assigned to any of the realms).</a>
<span class="sourceLineNo">181</span><a id="line.181">     */</a>
<span class="sourceLineNo">182</span><a id="line.182">    public SimpleAccount(Collection principals, Object credentials, String realmName, Set&lt;String&gt; roleNames, Set&lt;Permission&gt; permissions) {</a>
<span class="sourceLineNo">183</span><a id="line.183">        this.authcInfo = new SimpleAuthenticationInfo(new SimplePrincipalCollection(principals, realmName), credentials);</a>
<span class="sourceLineNo">184</span><a id="line.184">        this.authzInfo = new SimpleAuthorizationInfo(roleNames);</a>
<span class="sourceLineNo">185</span><a id="line.185">        this.authzInfo.setObjectPermissions(permissions);</a>
<span class="sourceLineNo">186</span><a id="line.186">    }</a>
<span class="sourceLineNo">187</span><a id="line.187"></a>
<span class="sourceLineNo">188</span><a id="line.188">    /**</a>
<span class="sourceLineNo">189</span><a id="line.189">     * Constructs a SimpleAccount instance from the given principals and credentials, with the</a>
<span class="sourceLineNo">190</span><a id="line.190">     * the assigned roles and permissions.</a>
<span class="sourceLineNo">191</span><a id="line.191">     *</a>
<span class="sourceLineNo">192</span><a id="line.192">     * @param principals  the identifying attributes of the account, at least one of which should be considered the</a>
<span class="sourceLineNo">193</span><a id="line.193">     *                    account's 'primary' identifying attribute, for example, a user id or username.</a>
<span class="sourceLineNo">194</span><a id="line.194">     * @param credentials the credentials that verify identity for the account</a>
<span class="sourceLineNo">195</span><a id="line.195">     * @param roleNames   the names of the roles assigned to this account.</a>
<span class="sourceLineNo">196</span><a id="line.196">     * @param permissions the permissions assigned to this account directly (not those assigned to any of the realms).</a>
<span class="sourceLineNo">197</span><a id="line.197">     */</a>
<span class="sourceLineNo">198</span><a id="line.198">    public SimpleAccount(PrincipalCollection principals, Object credentials, Set&lt;String&gt; roleNames, Set&lt;Permission&gt; permissions) {</a>
<span class="sourceLineNo">199</span><a id="line.199">        this.authcInfo = new SimpleAuthenticationInfo(principals, credentials);</a>
<span class="sourceLineNo">200</span><a id="line.200">        this.authzInfo = new SimpleAuthorizationInfo(roleNames);</a>
<span class="sourceLineNo">201</span><a id="line.201">        this.authzInfo.setObjectPermissions(permissions);</a>
<span class="sourceLineNo">202</span><a id="line.202">    }</a>
<span class="sourceLineNo">203</span><a id="line.203"></a>
<span class="sourceLineNo">204</span><a id="line.204">    /*--------------------------------------------</a>
<span class="sourceLineNo">205</span><a id="line.205">    |  A C C E S S O R S / M O D I F I E R S    |</a>
<span class="sourceLineNo">206</span><a id="line.206">    ============================================*/</a>
<span class="sourceLineNo">207</span><a id="line.207"></a>
<span class="sourceLineNo">208</span><a id="line.208">    /**</a>
<span class="sourceLineNo">209</span><a id="line.209">     * Returns the principals, aka the identifying attributes (username, user id, first name, last name, etc) of this</a>
<span class="sourceLineNo">210</span><a id="line.210">     * Account.</a>
<span class="sourceLineNo">211</span><a id="line.211">     *</a>
<span class="sourceLineNo">212</span><a id="line.212">     * @return all the principals, aka the identifying attributes, of this Account.</a>
<span class="sourceLineNo">213</span><a id="line.213">     */</a>
<span class="sourceLineNo">214</span><a id="line.214">    public PrincipalCollection getPrincipals() {</a>
<span class="sourceLineNo">215</span><a id="line.215">        return authcInfo.getPrincipals();</a>
<span class="sourceLineNo">216</span><a id="line.216">    }</a>
<span class="sourceLineNo">217</span><a id="line.217"></a>
<span class="sourceLineNo">218</span><a id="line.218">    /**</a>
<span class="sourceLineNo">219</span><a id="line.219">     * Sets the principals, aka the identifying attributes (username, user id, first name, last name, etc) of this</a>
<span class="sourceLineNo">220</span><a id="line.220">     * Account.</a>
<span class="sourceLineNo">221</span><a id="line.221">     *</a>
<span class="sourceLineNo">222</span><a id="line.222">     * @param principals all the principals, aka the identifying attributes, of this Account.</a>
<span class="sourceLineNo">223</span><a id="line.223">     * @see Account#getPrincipals()</a>
<span class="sourceLineNo">224</span><a id="line.224">     */</a>
<span class="sourceLineNo">225</span><a id="line.225">    public void setPrincipals(PrincipalCollection principals) {</a>
<span class="sourceLineNo">226</span><a id="line.226">        this.authcInfo.setPrincipals(principals);</a>
<span class="sourceLineNo">227</span><a id="line.227">    }</a>
<span class="sourceLineNo">228</span><a id="line.228"></a>
<span class="sourceLineNo">229</span><a id="line.229"></a>
<span class="sourceLineNo">230</span><a id="line.230">    /**</a>
<span class="sourceLineNo">231</span><a id="line.231">     * Simply returns &lt;code&gt;this.authcInfo.getCredentials&lt;/code&gt;.  The &lt;code&gt;authcInfo&lt;/code&gt; attribute is constructed</a>
<span class="sourceLineNo">232</span><a id="line.232">     * via the constructors to wrap the input arguments.</a>
<span class="sourceLineNo">233</span><a id="line.233">     *</a>
<span class="sourceLineNo">234</span><a id="line.234">     * @return this Account's credentials.</a>
<span class="sourceLineNo">235</span><a id="line.235">     */</a>
<span class="sourceLineNo">236</span><a id="line.236">    public Object getCredentials() {</a>
<span class="sourceLineNo">237</span><a id="line.237">        return authcInfo.getCredentials();</a>
<span class="sourceLineNo">238</span><a id="line.238">    }</a>
<span class="sourceLineNo">239</span><a id="line.239"></a>
<span class="sourceLineNo">240</span><a id="line.240">    /**</a>
<span class="sourceLineNo">241</span><a id="line.241">     * Sets this Account's credentials that verify one or more of the Account's</a>
<span class="sourceLineNo">242</span><a id="line.242">     * {@link #getPrincipals() principals}, such as a password or private key.</a>
<span class="sourceLineNo">243</span><a id="line.243">     *</a>
<span class="sourceLineNo">244</span><a id="line.244">     * @param credentials the credentials associated with this Account that verify one or more of the Account principals.</a>
<span class="sourceLineNo">245</span><a id="line.245">     * @see org.apache.shiro.authc.Account#getCredentials()</a>
<span class="sourceLineNo">246</span><a id="line.246">     */</a>
<span class="sourceLineNo">247</span><a id="line.247">    public void setCredentials(Object credentials) {</a>
<span class="sourceLineNo">248</span><a id="line.248">        this.authcInfo.setCredentials(credentials);</a>
<span class="sourceLineNo">249</span><a id="line.249">    }</a>
<span class="sourceLineNo">250</span><a id="line.250"></a>
<span class="sourceLineNo">251</span><a id="line.251">    /**</a>
<span class="sourceLineNo">252</span><a id="line.252">     * Returns the salt used to hash this Account's credentials (eg for password hashing), or {@code null} if no salt</a>
<span class="sourceLineNo">253</span><a id="line.253">     * was used or credentials were not hashed at all.</a>
<span class="sourceLineNo">254</span><a id="line.254">     *</a>
<span class="sourceLineNo">255</span><a id="line.255">     * @return the salt used to hash this Account's credentials (eg for password hashing), or {@code null} if no salt</a>
<span class="sourceLineNo">256</span><a id="line.256">     *         was used or credentials were not hashed at all.</a>
<span class="sourceLineNo">257</span><a id="line.257">     * @since 1.1</a>
<span class="sourceLineNo">258</span><a id="line.258">     */</a>
<span class="sourceLineNo">259</span><a id="line.259">    public ByteSource getCredentialsSalt() {</a>
<span class="sourceLineNo">260</span><a id="line.260">        return this.authcInfo.getCredentialsSalt();</a>
<span class="sourceLineNo">261</span><a id="line.261">    }</a>
<span class="sourceLineNo">262</span><a id="line.262"></a>
<span class="sourceLineNo">263</span><a id="line.263">    /**</a>
<span class="sourceLineNo">264</span><a id="line.264">     * Sets the salt to use to hash this Account's credentials (eg for password hashing), or {@code null} if no salt</a>
<span class="sourceLineNo">265</span><a id="line.265">     * is used or credentials are not hashed at all.</a>
<span class="sourceLineNo">266</span><a id="line.266">     *</a>
<span class="sourceLineNo">267</span><a id="line.267">     * @param salt the salt to use to hash this Account's credentials (eg for password hashing), or {@code null} if no</a>
<span class="sourceLineNo">268</span><a id="line.268">     *             salt is used or credentials are not hashed at all.</a>
<span class="sourceLineNo">269</span><a id="line.269">     * @since 1.1</a>
<span class="sourceLineNo">270</span><a id="line.270">     */</a>
<span class="sourceLineNo">271</span><a id="line.271">    public void setCredentialsSalt(ByteSource salt) {</a>
<span class="sourceLineNo">272</span><a id="line.272">        this.authcInfo.setCredentialsSalt(salt);</a>
<span class="sourceLineNo">273</span><a id="line.273">    }</a>
<span class="sourceLineNo">274</span><a id="line.274"></a>
<span class="sourceLineNo">275</span><a id="line.275">    /**</a>
<span class="sourceLineNo">276</span><a id="line.276">     * Returns &lt;code&gt;this.authzInfo.getRoles();&lt;/code&gt;</a>
<span class="sourceLineNo">277</span><a id="line.277">     *</a>
<span class="sourceLineNo">278</span><a id="line.278">     * @return the Account's assigned roles.</a>
<span class="sourceLineNo">279</span><a id="line.279">     */</a>
<span class="sourceLineNo">280</span><a id="line.280">    public Collection&lt;String&gt; getRoles() {</a>
<span class="sourceLineNo">281</span><a id="line.281">        return authzInfo.getRoles();</a>
<span class="sourceLineNo">282</span><a id="line.282">    }</a>
<span class="sourceLineNo">283</span><a id="line.283"></a>
<span class="sourceLineNo">284</span><a id="line.284">    /**</a>
<span class="sourceLineNo">285</span><a id="line.285">     * Sets the Account's assigned roles.  Simply calls &lt;code&gt;this.authzInfo.setRoles(roles)&lt;/code&gt;.</a>
<span class="sourceLineNo">286</span><a id="line.286">     *</a>
<span class="sourceLineNo">287</span><a id="line.287">     * @param roles the Account's assigned roles.</a>
<span class="sourceLineNo">288</span><a id="line.288">     * @see Account#getRoles()</a>
<span class="sourceLineNo">289</span><a id="line.289">     */</a>
<span class="sourceLineNo">290</span><a id="line.290">    public void setRoles(Set&lt;String&gt; roles) {</a>
<span class="sourceLineNo">291</span><a id="line.291">        this.authzInfo.setRoles(roles);</a>
<span class="sourceLineNo">292</span><a id="line.292">    }</a>
<span class="sourceLineNo">293</span><a id="line.293"></a>
<span class="sourceLineNo">294</span><a id="line.294">    /**</a>
<span class="sourceLineNo">295</span><a id="line.295">     * Adds a role to this Account's set of assigned roles.  Simply delegates to</a>
<span class="sourceLineNo">296</span><a id="line.296">     * &lt;code&gt;this.authzInfo.addRole(role)&lt;/code&gt;.</a>
<span class="sourceLineNo">297</span><a id="line.297">     *</a>
<span class="sourceLineNo">298</span><a id="line.298">     * @param role a role to assign to this Account.</a>
<span class="sourceLineNo">299</span><a id="line.299">     */</a>
<span class="sourceLineNo">300</span><a id="line.300">    public void addRole(String role) {</a>
<span class="sourceLineNo">301</span><a id="line.301">        this.authzInfo.addRole(role);</a>
<span class="sourceLineNo">302</span><a id="line.302">    }</a>
<span class="sourceLineNo">303</span><a id="line.303"></a>
<span class="sourceLineNo">304</span><a id="line.304">    /**</a>
<span class="sourceLineNo">305</span><a id="line.305">     * Adds one or more roles to this Account's set of assigned roles. Simply delegates to</a>
<span class="sourceLineNo">306</span><a id="line.306">     * &lt;code&gt;this.authzInfo.addRoles(roles)&lt;/code&gt;.</a>
<span class="sourceLineNo">307</span><a id="line.307">     *</a>
<span class="sourceLineNo">308</span><a id="line.308">     * @param roles one or more roles to assign to this Account.</a>
<span class="sourceLineNo">309</span><a id="line.309">     */</a>
<span class="sourceLineNo">310</span><a id="line.310">    public void addRole(Collection&lt;String&gt; roles) {</a>
<span class="sourceLineNo">311</span><a id="line.311">        this.authzInfo.addRoles(roles);</a>
<span class="sourceLineNo">312</span><a id="line.312">    }</a>
<span class="sourceLineNo">313</span><a id="line.313"></a>
<span class="sourceLineNo">314</span><a id="line.314">    /**</a>
<span class="sourceLineNo">315</span><a id="line.315">     * Returns all String-based permissions assigned to this Account.  Simply delegates to</a>
<span class="sourceLineNo">316</span><a id="line.316">     * &lt;code&gt;this.authzInfo.getStringPermissions()&lt;/code&gt;.</a>
<span class="sourceLineNo">317</span><a id="line.317">     *</a>
<span class="sourceLineNo">318</span><a id="line.318">     * @return all String-based permissions assigned to this Account.</a>
<span class="sourceLineNo">319</span><a id="line.319">     */</a>
<span class="sourceLineNo">320</span><a id="line.320">    public Collection&lt;String&gt; getStringPermissions() {</a>
<span class="sourceLineNo">321</span><a id="line.321">        return authzInfo.getStringPermissions();</a>
<span class="sourceLineNo">322</span><a id="line.322">    }</a>
<span class="sourceLineNo">323</span><a id="line.323"></a>
<span class="sourceLineNo">324</span><a id="line.324">    /**</a>
<span class="sourceLineNo">325</span><a id="line.325">     * Sets the String-based permissions assigned to this Account.  Simply delegates to</a>
<span class="sourceLineNo">326</span><a id="line.326">     * &lt;code&gt;this.authzInfo.setStringPermissions(permissions)&lt;/code&gt;.</a>
<span class="sourceLineNo">327</span><a id="line.327">     *</a>
<span class="sourceLineNo">328</span><a id="line.328">     * @param permissions all String-based permissions assigned to this Account.</a>
<span class="sourceLineNo">329</span><a id="line.329">     * @see org.apache.shiro.authc.Account#getStringPermissions()</a>
<span class="sourceLineNo">330</span><a id="line.330">     */</a>
<span class="sourceLineNo">331</span><a id="line.331">    public void setStringPermissions(Set&lt;String&gt; permissions) {</a>
<span class="sourceLineNo">332</span><a id="line.332">        this.authzInfo.setStringPermissions(permissions);</a>
<span class="sourceLineNo">333</span><a id="line.333">    }</a>
<span class="sourceLineNo">334</span><a id="line.334"></a>
<span class="sourceLineNo">335</span><a id="line.335">    /**</a>
<span class="sourceLineNo">336</span><a id="line.336">     * Assigns a String-based permission directly to this Account (not to any of its realms).</a>
<span class="sourceLineNo">337</span><a id="line.337">     *</a>
<span class="sourceLineNo">338</span><a id="line.338">     * @param permission the String-based permission to assign.</a>
<span class="sourceLineNo">339</span><a id="line.339">     */</a>
<span class="sourceLineNo">340</span><a id="line.340">    public void addStringPermission(String permission) {</a>
<span class="sourceLineNo">341</span><a id="line.341">        this.authzInfo.addStringPermission(permission);</a>
<span class="sourceLineNo">342</span><a id="line.342">    }</a>
<span class="sourceLineNo">343</span><a id="line.343"></a>
<span class="sourceLineNo">344</span><a id="line.344">    /**</a>
<span class="sourceLineNo">345</span><a id="line.345">     * Assigns one or more string-based permissions directly to this Account (not to any of its realms).</a>
<span class="sourceLineNo">346</span><a id="line.346">     *</a>
<span class="sourceLineNo">347</span><a id="line.347">     * @param permissions one or more String-based permissions to assign.</a>
<span class="sourceLineNo">348</span><a id="line.348">     */</a>
<span class="sourceLineNo">349</span><a id="line.349">    public void addStringPermissions(Collection&lt;String&gt; permissions) {</a>
<span class="sourceLineNo">350</span><a id="line.350">        this.authzInfo.addStringPermissions(permissions);</a>
<span class="sourceLineNo">351</span><a id="line.351">    }</a>
<span class="sourceLineNo">352</span><a id="line.352"></a>
<span class="sourceLineNo">353</span><a id="line.353">    /**</a>
<span class="sourceLineNo">354</span><a id="line.354">     * Returns all object-based permissions assigned directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">355</span><a id="line.355">     *</a>
<span class="sourceLineNo">356</span><a id="line.356">     * @return all object-based permissions assigned directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">357</span><a id="line.357">     */</a>
<span class="sourceLineNo">358</span><a id="line.358">    public Collection&lt;Permission&gt; getObjectPermissions() {</a>
<span class="sourceLineNo">359</span><a id="line.359">        return authzInfo.getObjectPermissions();</a>
<span class="sourceLineNo">360</span><a id="line.360">    }</a>
<span class="sourceLineNo">361</span><a id="line.361"></a>
<span class="sourceLineNo">362</span><a id="line.362">    /**</a>
<span class="sourceLineNo">363</span><a id="line.363">     * Sets all object-based permissions assigned directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">364</span><a id="line.364">     *</a>
<span class="sourceLineNo">365</span><a id="line.365">     * @param permissions the object-based permissions to assign directly to this Account.</a>
<span class="sourceLineNo">366</span><a id="line.366">     */</a>
<span class="sourceLineNo">367</span><a id="line.367">    public void setObjectPermissions(Set&lt;Permission&gt; permissions) {</a>
<span class="sourceLineNo">368</span><a id="line.368">        this.authzInfo.setObjectPermissions(permissions);</a>
<span class="sourceLineNo">369</span><a id="line.369">    }</a>
<span class="sourceLineNo">370</span><a id="line.370"></a>
<span class="sourceLineNo">371</span><a id="line.371">    /**</a>
<span class="sourceLineNo">372</span><a id="line.372">     * Assigns an object-based permission directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">373</span><a id="line.373">     *</a>
<span class="sourceLineNo">374</span><a id="line.374">     * @param permission the object-based permission to assign directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">375</span><a id="line.375">     */</a>
<span class="sourceLineNo">376</span><a id="line.376">    public void addObjectPermission(Permission permission) {</a>
<span class="sourceLineNo">377</span><a id="line.377">        this.authzInfo.addObjectPermission(permission);</a>
<span class="sourceLineNo">378</span><a id="line.378">    }</a>
<span class="sourceLineNo">379</span><a id="line.379"></a>
<span class="sourceLineNo">380</span><a id="line.380">    /**</a>
<span class="sourceLineNo">381</span><a id="line.381">     * Assigns one or more object-based permissions directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">382</span><a id="line.382">     *</a>
<span class="sourceLineNo">383</span><a id="line.383">     * @param permissions one or more object-based permissions to assign directly to this Account (not any of its realms).</a>
<span class="sourceLineNo">384</span><a id="line.384">     */</a>
<span class="sourceLineNo">385</span><a id="line.385">    public void addObjectPermissions(Collection&lt;Permission&gt; permissions) {</a>
<span class="sourceLineNo">386</span><a id="line.386">        this.authzInfo.addObjectPermissions(permissions);</a>
<span class="sourceLineNo">387</span><a id="line.387">    }</a>
<span class="sourceLineNo">388</span><a id="line.388"></a>
<span class="sourceLineNo">389</span><a id="line.389">    /**</a>
<span class="sourceLineNo">390</span><a id="line.390">     * Returns &lt;code&gt;true&lt;/code&gt; if this Account is locked and thus cannot be used to login, &lt;code&gt;false&lt;/code&gt; otherwise.</a>
<span class="sourceLineNo">391</span><a id="line.391">     *</a>
<span class="sourceLineNo">392</span><a id="line.392">     * @return &lt;code&gt;true&lt;/code&gt; if this Account is locked and thus cannot be used to login, &lt;code&gt;false&lt;/code&gt; otherwise.</a>
<span class="sourceLineNo">393</span><a id="line.393">     */</a>
<span class="sourceLineNo">394</span><a id="line.394">    public boolean isLocked() {</a>
<span class="sourceLineNo">395</span><a id="line.395">        return locked;</a>
<span class="sourceLineNo">396</span><a id="line.396">    }</a>
<span class="sourceLineNo">397</span><a id="line.397"></a>
<span class="sourceLineNo">398</span><a id="line.398">    /**</a>
<span class="sourceLineNo">399</span><a id="line.399">     * Sets whether or not the account is locked and can be used to login.</a>
<span class="sourceLineNo">400</span><a id="line.400">     *</a>
<span class="sourceLineNo">401</span><a id="line.401">     * @param locked &lt;code&gt;true&lt;/code&gt; if this Account is locked and thus cannot be used to login, &lt;code&gt;false&lt;/code&gt; otherwise.</a>
<span class="sourceLineNo">402</span><a id="line.402">     */</a>
<span class="sourceLineNo">403</span><a id="line.403">    public void setLocked(boolean locked) {</a>
<span class="sourceLineNo">404</span><a id="line.404">        this.locked = locked;</a>
<span class="sourceLineNo">405</span><a id="line.405">    }</a>
<span class="sourceLineNo">406</span><a id="line.406"></a>
<span class="sourceLineNo">407</span><a id="line.407">    /**</a>
<span class="sourceLineNo">408</span><a id="line.408">     * Returns whether or not the Account's credentials are expired.  This usually indicates that the Subject or an application</a>
<span class="sourceLineNo">409</span><a id="line.409">     * administrator would need to change the credentials before the account could be used.</a>
<span class="sourceLineNo">410</span><a id="line.410">     *</a>
<span class="sourceLineNo">411</span><a id="line.411">     * @return whether or not the Account's credentials are expired.</a>
<span class="sourceLineNo">412</span><a id="line.412">     */</a>
<span class="sourceLineNo">413</span><a id="line.413">    public boolean isCredentialsExpired() {</a>
<span class="sourceLineNo">414</span><a id="line.414">        return credentialsExpired;</a>
<span class="sourceLineNo">415</span><a id="line.415">    }</a>
<span class="sourceLineNo">416</span><a id="line.416"></a>
<span class="sourceLineNo">417</span><a id="line.417">    /**</a>
<span class="sourceLineNo">418</span><a id="line.418">     * Sets whether or not the Account's credentials are expired.  A &lt;code&gt;true&lt;/code&gt; value indicates that the Subject</a>
<span class="sourceLineNo">419</span><a id="line.419">     * or application administrator would need to change their credentials before the account could be used.</a>
<span class="sourceLineNo">420</span><a id="line.420">     *</a>
<span class="sourceLineNo">421</span><a id="line.421">     * @param credentialsExpired &lt;code&gt;true&lt;/code&gt; if this Account's credentials are expired and need to be changed,</a>
<span class="sourceLineNo">422</span><a id="line.422">     *                           &lt;code&gt;false&lt;/code&gt; otherwise.</a>
<span class="sourceLineNo">423</span><a id="line.423">     */</a>
<span class="sourceLineNo">424</span><a id="line.424">    public void setCredentialsExpired(boolean credentialsExpired) {</a>
<span class="sourceLineNo">425</span><a id="line.425">        this.credentialsExpired = credentialsExpired;</a>
<span class="sourceLineNo">426</span><a id="line.426">    }</a>
<span class="sourceLineNo">427</span><a id="line.427"></a>
<span class="sourceLineNo">428</span><a id="line.428"></a>
<span class="sourceLineNo">429</span><a id="line.429">    /**</a>
<span class="sourceLineNo">430</span><a id="line.430">     * Merges the specified &lt;code&gt;AuthenticationInfo&lt;/code&gt; into this &lt;code&gt;Account&lt;/code&gt;.</a>
<span class="sourceLineNo">431</span><a id="line.431">     * &lt;p/&gt;</a>
<span class="sourceLineNo">432</span><a id="line.432">     * If the specified argument is also an instance of {@link SimpleAccount SimpleAccount}, the</a>
<span class="sourceLineNo">433</span><a id="line.433">     * {@link #isLocked()} and {@link #isCredentialsExpired()} attributes are merged (set on this instance) as well</a>
<span class="sourceLineNo">434</span><a id="line.434">     * (only if their values are &lt;code&gt;true&lt;/code&gt;).</a>
<span class="sourceLineNo">435</span><a id="line.435">     *</a>
<span class="sourceLineNo">436</span><a id="line.436">     * @param info the &lt;code&gt;AuthenticationInfo&lt;/code&gt; to merge into this account.</a>
<span class="sourceLineNo">437</span><a id="line.437">     */</a>
<span class="sourceLineNo">438</span><a id="line.438">    public void merge(AuthenticationInfo info) {</a>
<span class="sourceLineNo">439</span><a id="line.439">        authcInfo.merge(info);</a>
<span class="sourceLineNo">440</span><a id="line.440"></a>
<span class="sourceLineNo">441</span><a id="line.441">        // Merge SimpleAccount specific info</a>
<span class="sourceLineNo">442</span><a id="line.442">        if (info instanceof SimpleAccount) {</a>
<span class="sourceLineNo">443</span><a id="line.443">            SimpleAccount otherAccount = (SimpleAccount) info;</a>
<span class="sourceLineNo">444</span><a id="line.444">            if (otherAccount.isLocked()) {</a>
<span class="sourceLineNo">445</span><a id="line.445">                setLocked(true);</a>
<span class="sourceLineNo">446</span><a id="line.446">            }</a>
<span class="sourceLineNo">447</span><a id="line.447"></a>
<span class="sourceLineNo">448</span><a id="line.448">            if (otherAccount.isCredentialsExpired()) {</a>
<span class="sourceLineNo">449</span><a id="line.449">                setCredentialsExpired(true);</a>
<span class="sourceLineNo">450</span><a id="line.450">            }</a>
<span class="sourceLineNo">451</span><a id="line.451">        }</a>
<span class="sourceLineNo">452</span><a id="line.452">    }</a>
<span class="sourceLineNo">453</span><a id="line.453"></a>
<span class="sourceLineNo">454</span><a id="line.454">    /**</a>
<span class="sourceLineNo">455</span><a id="line.455">     * If the {@link #getPrincipals() principals} are not null, returns &lt;code&gt;principals.hashCode()&lt;/code&gt;, otherwise</a>
<span class="sourceLineNo">456</span><a id="line.456">     * returns 0 (zero).</a>
<span class="sourceLineNo">457</span><a id="line.457">     *</a>
<span class="sourceLineNo">458</span><a id="line.458">     * @return &lt;code&gt;principals.hashCode()&lt;/code&gt; if they are not null, 0 (zero) otherwise.</a>
<span class="sourceLineNo">459</span><a id="line.459">     */</a>
<span class="sourceLineNo">460</span><a id="line.460">    public int hashCode() {</a>
<span class="sourceLineNo">461</span><a id="line.461">        return (getPrincipals() != null ? getPrincipals().hashCode() : 0);</a>
<span class="sourceLineNo">462</span><a id="line.462">    }</a>
<span class="sourceLineNo">463</span><a id="line.463"></a>
<span class="sourceLineNo">464</span><a id="line.464">    /**</a>
<span class="sourceLineNo">465</span><a id="line.465">     * Returns &lt;code&gt;true&lt;/code&gt; if the specified object is also a {@link SimpleAccount SimpleAccount} and its</a>
<span class="sourceLineNo">466</span><a id="line.466">     * {@link #getPrincipals() principals} are equal to this object's &lt;code&gt;principals&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt; otherwise.</a>
<span class="sourceLineNo">467</span><a id="line.467">     *</a>
<span class="sourceLineNo">468</span><a id="line.468">     * @param o the object to test for equality.</a>
<span class="sourceLineNo">469</span><a id="line.469">     * @return &lt;code&gt;true&lt;/code&gt; if the specified object is also a {@link SimpleAccount SimpleAccount} and its</a>
<span class="sourceLineNo">470</span><a id="line.470">     *         {@link #getPrincipals() principals} are equal to this object's &lt;code&gt;principals&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt; otherwise.</a>
<span class="sourceLineNo">471</span><a id="line.471">     */</a>
<span class="sourceLineNo">472</span><a id="line.472">    public boolean equals(Object o) {</a>
<span class="sourceLineNo">473</span><a id="line.473">        if (o == this) {</a>
<span class="sourceLineNo">474</span><a id="line.474">            return true;</a>
<span class="sourceLineNo">475</span><a id="line.475">        }</a>
<span class="sourceLineNo">476</span><a id="line.476">        if (o instanceof SimpleAccount) {</a>
<span class="sourceLineNo">477</span><a id="line.477">            SimpleAccount sa = (SimpleAccount) o;</a>
<span class="sourceLineNo">478</span><a id="line.478">            //principal should be unique across the application, so only check this for equality:</a>
<span class="sourceLineNo">479</span><a id="line.479">            return (getPrincipals() != null ? getPrincipals().equals(sa.getPrincipals()) : sa.getPrincipals() == null);</a>
<span class="sourceLineNo">480</span><a id="line.480">        }</a>
<span class="sourceLineNo">481</span><a id="line.481">        return false;</a>
<span class="sourceLineNo">482</span><a id="line.482">    }</a>
<span class="sourceLineNo">483</span><a id="line.483"></a>
<span class="sourceLineNo">484</span><a id="line.484">    /**</a>
<span class="sourceLineNo">485</span><a id="line.485">     * Returns {@link #getPrincipals() principals}.toString() if they are not null, otherwise prints out the string</a>
<span class="sourceLineNo">486</span><a id="line.486">     * &amp;quot;empty&amp;quot;</a>
<span class="sourceLineNo">487</span><a id="line.487">     *</a>
<span class="sourceLineNo">488</span><a id="line.488">     * @return the String representation of this Account object.</a>
<span class="sourceLineNo">489</span><a id="line.489">     */</a>
<span class="sourceLineNo">490</span><a id="line.490">    public String toString() {</a>
<span class="sourceLineNo">491</span><a id="line.491">        return getPrincipals() != null ? getPrincipals().toString() : "empty";</a>
<span class="sourceLineNo">492</span><a id="line.492">    }</a>
<span class="sourceLineNo">493</span><a id="line.493"></a>
<span class="sourceLineNo">494</span><a id="line.494">}</a>




























































</pre>
</div>
</main>
</body>
</html>