<!DOCTYPE HTML>
<html lang="en">
<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.mgt;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.session.Session;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.subject.PrincipalCollection;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.subject.Subject;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.subject.support.DefaultSubjectContext;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.subject.support.DelegatingSubject;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.slf4j.Logger;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">028</span><a id="line.28"></a>
<span class="sourceLineNo">029</span><a id="line.29">import java.lang.reflect.Field;</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"> * Default {@code SubjectDAO} implementation that stores Subject state in the Subject's Session by default (but this</a>
<span class="sourceLineNo">033</span><a id="line.33"> * can be disabled - see below).  The Subject instance</a>
<span class="sourceLineNo">034</span><a id="line.34"> * can be re-created at a later time by first acquiring the associated Session (typically from a</a>
<span class="sourceLineNo">035</span><a id="line.35"> * {@link org.apache.shiro.session.mgt.SessionManager SessionManager}) via a session ID or session key and then</a>
<span class="sourceLineNo">036</span><a id="line.36"> * building a {@code Subject} instance from {@code Session} attributes.</a>
<span class="sourceLineNo">037</span><a id="line.37"> * &lt;h2&gt;Controlling how Sessions are used&lt;/h2&gt;</a>
<span class="sourceLineNo">038</span><a id="line.38"> * Whether or not a {@code Subject}'s {@code Session} is used or not to persist its own state is controlled on a</a>
<span class="sourceLineNo">039</span><a id="line.39"> * &lt;em&gt;per-Subject&lt;/em&gt; basis as determined by the configured</a>
<span class="sourceLineNo">040</span><a id="line.40"> * {@link #setSessionStorageEvaluator(SessionStorageEvaluator) sessionStorageEvaluator}.</a>
<span class="sourceLineNo">041</span><a id="line.41"> * The default {@code Evaluator} is a {@link DefaultSessionStorageEvaluator}, which supports enabling or disabling</a>
<span class="sourceLineNo">042</span><a id="line.42"> * session usage for Subject persistence at a global level for all subjects (and defaults to allowing sessions to be</a>
<span class="sourceLineNo">043</span><a id="line.43"> * used).</a>
<span class="sourceLineNo">044</span><a id="line.44"> * &lt;h3&gt;Disabling Session Persistence Entirely&lt;/h3&gt;</a>
<span class="sourceLineNo">045</span><a id="line.45"> * Because the default {@code SessionStorageEvaluator} instance is a {@link DefaultSessionStorageEvaluator}, you</a>
<span class="sourceLineNo">046</span><a id="line.46"> * can disable Session usage for Subject state entirely by configuring that instance directly, e.g.:</a>
<span class="sourceLineNo">047</span><a id="line.47"> * &lt;pre&gt;</a>
<span class="sourceLineNo">048</span><a id="line.48"> *     ((DefaultSessionStorageEvaluator)sessionDAO.getSessionStorageEvaluator()).setSessionStorageEnabled(false);</a>
<span class="sourceLineNo">049</span><a id="line.49"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">050</span><a id="line.50"> * or, for example, in {@code shiro.ini}:</a>
<span class="sourceLineNo">051</span><a id="line.51"> * &lt;pre&gt;</a>
<span class="sourceLineNo">052</span><a id="line.52"> *     securityManager.subjectDAO.sessionStorageEvaluator.sessionStorageEnabled = false</a>
<span class="sourceLineNo">053</span><a id="line.53"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">054</span><a id="line.54"> * but &lt;b&gt;note:&lt;/b&gt; ONLY do this your</a>
<span class="sourceLineNo">055</span><a id="line.55"> * application is 100% stateless and you &lt;em&gt;DO NOT&lt;/em&gt; need subjects to be remembered across remote</a>
<span class="sourceLineNo">056</span><a id="line.56"> * invocations, or in a web environment across HTTP requests.</a>
<span class="sourceLineNo">057</span><a id="line.57"> * &lt;h3&gt;Supporting Both Stateful and Stateless Subject paradigms&lt;/h3&gt;</a>
<span class="sourceLineNo">058</span><a id="line.58"> * Perhaps your application needs to support a hybrid approach of both stateful and stateless Subjects:</a>
<span class="sourceLineNo">059</span><a id="line.59"> * &lt;ul&gt;</a>
<span class="sourceLineNo">060</span><a id="line.60"> * &lt;li&gt;Stateful: Stateful subjects might represent web end-users that need their identity and authentication</a>
<span class="sourceLineNo">061</span><a id="line.61"> * state to be remembered from page to page.&lt;/li&gt;</a>
<span class="sourceLineNo">062</span><a id="line.62"> * &lt;li&gt;Stateless: Stateless subjects might represent API clients (e.g. REST clients) that authenticate on every</a>
<span class="sourceLineNo">063</span><a id="line.63"> * request, and therefore don't need authentication state to be stored across requests in a session.&lt;/li&gt;</a>
<span class="sourceLineNo">064</span><a id="line.64"> * &lt;/ul&gt;</a>
<span class="sourceLineNo">065</span><a id="line.65"> * To support the hybrid &lt;em&gt;per-Subject&lt;/em&gt; approach, you will need to create your own implementation of the</a>
<span class="sourceLineNo">066</span><a id="line.66"> * {@link SessionStorageEvaluator} interface and configure it via the</a>
<span class="sourceLineNo">067</span><a id="line.67"> * {@link #setSessionStorageEvaluator(SessionStorageEvaluator)} method, or, with {@code shiro.ini}:</a>
<span class="sourceLineNo">068</span><a id="line.68"> * &lt;pre&gt;</a>
<span class="sourceLineNo">069</span><a id="line.69"> *     myEvaluator = com.my.CustomSessionStorageEvaluator</a>
<span class="sourceLineNo">070</span><a id="line.70"> *     securityManager.subjectDAO.sessionStorageEvaluator = $myEvaluator</a>
<span class="sourceLineNo">071</span><a id="line.71"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">072</span><a id="line.72"> * &lt;p/&gt;</a>
<span class="sourceLineNo">073</span><a id="line.73"> * Unless overridden, the default evaluator is a {@link DefaultSessionStorageEvaluator}, which enables session usage for</a>
<span class="sourceLineNo">074</span><a id="line.74"> * Subject state by default.</a>
<span class="sourceLineNo">075</span><a id="line.75"> *</a>
<span class="sourceLineNo">076</span><a id="line.76"> * @see #isSessionStorageEnabled(org.apache.shiro.subject.Subject)</a>
<span class="sourceLineNo">077</span><a id="line.77"> * @see SessionStorageEvaluator</a>
<span class="sourceLineNo">078</span><a id="line.78"> * @see DefaultSessionStorageEvaluator</a>
<span class="sourceLineNo">079</span><a id="line.79"> * @since 1.2</a>
<span class="sourceLineNo">080</span><a id="line.80"> */</a>
<span class="sourceLineNo">081</span><a id="line.81">public class DefaultSubjectDAO implements SubjectDAO {</a>
<span class="sourceLineNo">082</span><a id="line.82"></a>
<span class="sourceLineNo">083</span><a id="line.83">    private static final Logger log = LoggerFactory.getLogger(DefaultSubjectDAO.class);</a>
<span class="sourceLineNo">084</span><a id="line.84"></a>
<span class="sourceLineNo">085</span><a id="line.85">    /**</a>
<span class="sourceLineNo">086</span><a id="line.86">     * Evaluator that determines if a Subject's session may be used to store the Subject's own state.</a>
<span class="sourceLineNo">087</span><a id="line.87">     */</a>
<span class="sourceLineNo">088</span><a id="line.88">    private SessionStorageEvaluator sessionStorageEvaluator;</a>
<span class="sourceLineNo">089</span><a id="line.89"></a>
<span class="sourceLineNo">090</span><a id="line.90">    public DefaultSubjectDAO() {</a>
<span class="sourceLineNo">091</span><a id="line.91">        //default implementation allows enabling/disabling session usages at a global level for all subjects:</a>
<span class="sourceLineNo">092</span><a id="line.92">        this.sessionStorageEvaluator = new DefaultSessionStorageEvaluator();</a>
<span class="sourceLineNo">093</span><a id="line.93">    }</a>
<span class="sourceLineNo">094</span><a id="line.94"></a>
<span class="sourceLineNo">095</span><a id="line.95">    /**</a>
<span class="sourceLineNo">096</span><a id="line.96">     * Determines if the subject's session will be used to persist subject state or not.  This implementation</a>
<span class="sourceLineNo">097</span><a id="line.97">     * merely delegates to the internal {@link SessionStorageEvaluator} (a</a>
<span class="sourceLineNo">098</span><a id="line.98">     * {@code DefaultSessionStorageEvaluator} by default).</a>
<span class="sourceLineNo">099</span><a id="line.99">     *</a>
<span class="sourceLineNo">100</span><a id="line.100">     * @param subject the subject to inspect to determine if the subject's session will be used to persist subject</a>
<span class="sourceLineNo">101</span><a id="line.101">     *                state or not.</a>
<span class="sourceLineNo">102</span><a id="line.102">     * @return {@code true} if the subject's session will be used to persist subject state, {@code false} otherwise.</a>
<span class="sourceLineNo">103</span><a id="line.103">     * @see #setSessionStorageEvaluator(SessionStorageEvaluator)</a>
<span class="sourceLineNo">104</span><a id="line.104">     * @see DefaultSessionStorageEvaluator</a>
<span class="sourceLineNo">105</span><a id="line.105">     */</a>
<span class="sourceLineNo">106</span><a id="line.106">    protected boolean isSessionStorageEnabled(Subject subject) {</a>
<span class="sourceLineNo">107</span><a id="line.107">        return getSessionStorageEvaluator().isSessionStorageEnabled(subject);</a>
<span class="sourceLineNo">108</span><a id="line.108">    }</a>
<span class="sourceLineNo">109</span><a id="line.109"></a>
<span class="sourceLineNo">110</span><a id="line.110">    /**</a>
<span class="sourceLineNo">111</span><a id="line.111">     * Returns the {@code SessionStorageEvaluator} that will determine if a {@code Subject}'s state may be persisted in</a>
<span class="sourceLineNo">112</span><a id="line.112">     * the Subject's session.  The default instance is a {@link DefaultSessionStorageEvaluator}.</a>
<span class="sourceLineNo">113</span><a id="line.113">     *</a>
<span class="sourceLineNo">114</span><a id="line.114">     * @return the {@code SessionStorageEvaluator} that will determine if a {@code Subject}'s state may be persisted in</a>
<span class="sourceLineNo">115</span><a id="line.115">     *         the Subject's session.</a>
<span class="sourceLineNo">116</span><a id="line.116">     * @see DefaultSessionStorageEvaluator</a>
<span class="sourceLineNo">117</span><a id="line.117">     */</a>
<span class="sourceLineNo">118</span><a id="line.118">    public SessionStorageEvaluator getSessionStorageEvaluator() {</a>
<span class="sourceLineNo">119</span><a id="line.119">        return sessionStorageEvaluator;</a>
<span class="sourceLineNo">120</span><a id="line.120">    }</a>
<span class="sourceLineNo">121</span><a id="line.121"></a>
<span class="sourceLineNo">122</span><a id="line.122">    /**</a>
<span class="sourceLineNo">123</span><a id="line.123">     * Sets the {@code SessionStorageEvaluator} that will determine if a {@code Subject}'s state may be persisted in</a>
<span class="sourceLineNo">124</span><a id="line.124">     * the Subject's session. The default instance is a {@link DefaultSessionStorageEvaluator}.</a>
<span class="sourceLineNo">125</span><a id="line.125">     *</a>
<span class="sourceLineNo">126</span><a id="line.126">     * @param sessionStorageEvaluator the {@code SessionStorageEvaluator} that will determine if a {@code Subject}'s</a>
<span class="sourceLineNo">127</span><a id="line.127">     *                                state may be persisted in the Subject's session.</a>
<span class="sourceLineNo">128</span><a id="line.128">     * @see DefaultSessionStorageEvaluator</a>
<span class="sourceLineNo">129</span><a id="line.129">     */</a>
<span class="sourceLineNo">130</span><a id="line.130">    public void setSessionStorageEvaluator(SessionStorageEvaluator sessionStorageEvaluator) {</a>
<span class="sourceLineNo">131</span><a id="line.131">        this.sessionStorageEvaluator = sessionStorageEvaluator;</a>
<span class="sourceLineNo">132</span><a id="line.132">    }</a>
<span class="sourceLineNo">133</span><a id="line.133"></a>
<span class="sourceLineNo">134</span><a id="line.134">    /**</a>
<span class="sourceLineNo">135</span><a id="line.135">     * Saves the subject's state to the subject's {@link org.apache.shiro.subject.Subject#getSession() session} only</a>
<span class="sourceLineNo">136</span><a id="line.136">     * if {@link #isSessionStorageEnabled(Subject) sessionStorageEnabled(subject)}.  If session storage is not enabled</a>
<span class="sourceLineNo">137</span><a id="line.137">     * for the specific {@code Subject}, this method does nothing.</a>
<span class="sourceLineNo">138</span><a id="line.138">     * &lt;p/&gt;</a>
<span class="sourceLineNo">139</span><a id="line.139">     * In either case, the argument {@code Subject} is returned directly (a new Subject instance is not created).</a>
<span class="sourceLineNo">140</span><a id="line.140">     *</a>
<span class="sourceLineNo">141</span><a id="line.141">     * @param subject the Subject instance for which its state will be created or updated.</a>
<span class="sourceLineNo">142</span><a id="line.142">     * @return the same {@code Subject} passed in (a new Subject instance is not created).</a>
<span class="sourceLineNo">143</span><a id="line.143">     */</a>
<span class="sourceLineNo">144</span><a id="line.144">    public Subject save(Subject subject) {</a>
<span class="sourceLineNo">145</span><a id="line.145">        if (isSessionStorageEnabled(subject)) {</a>
<span class="sourceLineNo">146</span><a id="line.146">            saveToSession(subject);</a>
<span class="sourceLineNo">147</span><a id="line.147">        } else {</a>
<span class="sourceLineNo">148</span><a id="line.148">            log.trace("Session storage of subject state for Subject [{}] has been disabled: identity and " +</a>
<span class="sourceLineNo">149</span><a id="line.149">                    "authentication state are expected to be initialized on every request or invocation.", subject);</a>
<span class="sourceLineNo">150</span><a id="line.150">        }</a>
<span class="sourceLineNo">151</span><a id="line.151"></a>
<span class="sourceLineNo">152</span><a id="line.152">        return subject;</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">     * Saves the subject's state (it's principals and authentication state) to its</a>
<span class="sourceLineNo">157</span><a id="line.157">     * {@link org.apache.shiro.subject.Subject#getSession() session}.  The session can be retrieved at a later time</a>
<span class="sourceLineNo">158</span><a id="line.158">     * (typically from a {@link org.apache.shiro.session.mgt.SessionManager SessionManager} to be used to recreate</a>
<span class="sourceLineNo">159</span><a id="line.159">     * the {@code Subject} instance.</a>
<span class="sourceLineNo">160</span><a id="line.160">     *</a>
<span class="sourceLineNo">161</span><a id="line.161">     * @param subject the subject for which state will be persisted to its session.</a>
<span class="sourceLineNo">162</span><a id="line.162">     */</a>
<span class="sourceLineNo">163</span><a id="line.163">    protected void saveToSession(Subject subject) {</a>
<span class="sourceLineNo">164</span><a id="line.164">        //performs merge logic, only updating the Subject's session if it does not match the current state:</a>
<span class="sourceLineNo">165</span><a id="line.165">        mergePrincipals(subject);</a>
<span class="sourceLineNo">166</span><a id="line.166">        mergeAuthenticationState(subject);</a>
<span class="sourceLineNo">167</span><a id="line.167">    }</a>
<span class="sourceLineNo">168</span><a id="line.168"></a>
<span class="sourceLineNo">169</span><a id="line.169">    private static boolean isEmpty(PrincipalCollection pc) {</a>
<span class="sourceLineNo">170</span><a id="line.170">        return pc == null || pc.isEmpty();</a>
<span class="sourceLineNo">171</span><a id="line.171">    }</a>
<span class="sourceLineNo">172</span><a id="line.172"></a>
<span class="sourceLineNo">173</span><a id="line.173">    /**</a>
<span class="sourceLineNo">174</span><a id="line.174">     * Merges the Subject's current {@link org.apache.shiro.subject.Subject#getPrincipals()} with whatever may be in</a>
<span class="sourceLineNo">175</span><a id="line.175">     * any available session.  Only updates the Subject's session if the session does not match the current principals</a>
<span class="sourceLineNo">176</span><a id="line.176">     * state.</a>
<span class="sourceLineNo">177</span><a id="line.177">     *</a>
<span class="sourceLineNo">178</span><a id="line.178">     * @param subject the Subject for which principals will potentially be merged into the Subject's session.</a>
<span class="sourceLineNo">179</span><a id="line.179">     */</a>
<span class="sourceLineNo">180</span><a id="line.180">    protected void mergePrincipals(Subject subject) {</a>
<span class="sourceLineNo">181</span><a id="line.181">        //merge PrincipalCollection state:</a>
<span class="sourceLineNo">182</span><a id="line.182"></a>
<span class="sourceLineNo">183</span><a id="line.183">        PrincipalCollection currentPrincipals = null;</a>
<span class="sourceLineNo">184</span><a id="line.184"></a>
<span class="sourceLineNo">185</span><a id="line.185">        //SHIRO-380: added if/else block - need to retain original (source) principals</a>
<span class="sourceLineNo">186</span><a id="line.186">        //This technique (reflection) is only temporary - a proper long term solution needs to be found,</a>
<span class="sourceLineNo">187</span><a id="line.187">        //but this technique allowed an immediate fix that is API point-version forwards and backwards compatible</a>
<span class="sourceLineNo">188</span><a id="line.188">        //</a>
<span class="sourceLineNo">189</span><a id="line.189">        //A more comprehensive review / cleaning of runAs should be performed for Shiro 1.3 / 2.0 +</a>
<span class="sourceLineNo">190</span><a id="line.190">        if (subject.isRunAs() &amp;&amp; subject instanceof DelegatingSubject) {</a>
<span class="sourceLineNo">191</span><a id="line.191">            try {</a>
<span class="sourceLineNo">192</span><a id="line.192">                Field field = DelegatingSubject.class.getDeclaredField("principals");</a>
<span class="sourceLineNo">193</span><a id="line.193">                field.setAccessible(true);</a>
<span class="sourceLineNo">194</span><a id="line.194">                currentPrincipals = (PrincipalCollection)field.get(subject);</a>
<span class="sourceLineNo">195</span><a id="line.195">            } catch (Exception e) {</a>
<span class="sourceLineNo">196</span><a id="line.196">                throw new IllegalStateException("Unable to access DelegatingSubject principals property.", e);</a>
<span class="sourceLineNo">197</span><a id="line.197">            }</a>
<span class="sourceLineNo">198</span><a id="line.198">        }</a>
<span class="sourceLineNo">199</span><a id="line.199">        if (currentPrincipals == null || currentPrincipals.isEmpty()) {</a>
<span class="sourceLineNo">200</span><a id="line.200">            currentPrincipals = subject.getPrincipals();</a>
<span class="sourceLineNo">201</span><a id="line.201">        }</a>
<span class="sourceLineNo">202</span><a id="line.202"></a>
<span class="sourceLineNo">203</span><a id="line.203">        Session session = subject.getSession(false);</a>
<span class="sourceLineNo">204</span><a id="line.204"></a>
<span class="sourceLineNo">205</span><a id="line.205">        if (session == null) {</a>
<span class="sourceLineNo">206</span><a id="line.206">            if (!isEmpty(currentPrincipals)) {</a>
<span class="sourceLineNo">207</span><a id="line.207">                session = subject.getSession();</a>
<span class="sourceLineNo">208</span><a id="line.208">                session.setAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY, currentPrincipals);</a>
<span class="sourceLineNo">209</span><a id="line.209">            }</a>
<span class="sourceLineNo">210</span><a id="line.210">            // otherwise no session and no principals - nothing to save</a>
<span class="sourceLineNo">211</span><a id="line.211">        } else {</a>
<span class="sourceLineNo">212</span><a id="line.212">            PrincipalCollection existingPrincipals =</a>
<span class="sourceLineNo">213</span><a id="line.213">                    (PrincipalCollection) session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);</a>
<span class="sourceLineNo">214</span><a id="line.214"></a>
<span class="sourceLineNo">215</span><a id="line.215">            if (isEmpty(currentPrincipals)) {</a>
<span class="sourceLineNo">216</span><a id="line.216">                if (!isEmpty(existingPrincipals)) {</a>
<span class="sourceLineNo">217</span><a id="line.217">                    session.removeAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);</a>
<span class="sourceLineNo">218</span><a id="line.218">                }</a>
<span class="sourceLineNo">219</span><a id="line.219">                // otherwise both are null or empty - no need to update the session</a>
<span class="sourceLineNo">220</span><a id="line.220">            } else {</a>
<span class="sourceLineNo">221</span><a id="line.221">                if (!currentPrincipals.equals(existingPrincipals)) {</a>
<span class="sourceLineNo">222</span><a id="line.222">                    session.setAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY, currentPrincipals);</a>
<span class="sourceLineNo">223</span><a id="line.223">                }</a>
<span class="sourceLineNo">224</span><a id="line.224">                // otherwise they're the same - no need to update the session</a>
<span class="sourceLineNo">225</span><a id="line.225">            }</a>
<span class="sourceLineNo">226</span><a id="line.226">        }</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">     * Merges the Subject's current authentication state with whatever may be in</a>
<span class="sourceLineNo">231</span><a id="line.231">     * any available session.  Only updates the Subject's session if the session does not match the current</a>
<span class="sourceLineNo">232</span><a id="line.232">     * authentication state.</a>
<span class="sourceLineNo">233</span><a id="line.233">     *</a>
<span class="sourceLineNo">234</span><a id="line.234">     * @param subject the Subject for which principals will potentially be merged into the Subject's session.</a>
<span class="sourceLineNo">235</span><a id="line.235">     */</a>
<span class="sourceLineNo">236</span><a id="line.236">    protected void mergeAuthenticationState(Subject subject) {</a>
<span class="sourceLineNo">237</span><a id="line.237"></a>
<span class="sourceLineNo">238</span><a id="line.238">        Session session = subject.getSession(false);</a>
<span class="sourceLineNo">239</span><a id="line.239"></a>
<span class="sourceLineNo">240</span><a id="line.240">        if (session == null) {</a>
<span class="sourceLineNo">241</span><a id="line.241">            if (subject.isAuthenticated()) {</a>
<span class="sourceLineNo">242</span><a id="line.242">                session = subject.getSession();</a>
<span class="sourceLineNo">243</span><a id="line.243">                session.setAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY, Boolean.TRUE);</a>
<span class="sourceLineNo">244</span><a id="line.244">            }</a>
<span class="sourceLineNo">245</span><a id="line.245">            //otherwise no session and not authenticated - nothing to save</a>
<span class="sourceLineNo">246</span><a id="line.246">        } else {</a>
<span class="sourceLineNo">247</span><a id="line.247">            Boolean existingAuthc = (Boolean) session.getAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY);</a>
<span class="sourceLineNo">248</span><a id="line.248"></a>
<span class="sourceLineNo">249</span><a id="line.249">            if (subject.isAuthenticated()) {</a>
<span class="sourceLineNo">250</span><a id="line.250">                if (existingAuthc == null || !existingAuthc) {</a>
<span class="sourceLineNo">251</span><a id="line.251">                    session.setAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY, Boolean.TRUE);</a>
<span class="sourceLineNo">252</span><a id="line.252">                }</a>
<span class="sourceLineNo">253</span><a id="line.253">                //otherwise authc state matches - no need to update the session</a>
<span class="sourceLineNo">254</span><a id="line.254">            } else {</a>
<span class="sourceLineNo">255</span><a id="line.255">                if (existingAuthc != null) {</a>
<span class="sourceLineNo">256</span><a id="line.256">                    //existing doesn't match the current state - remove it:</a>
<span class="sourceLineNo">257</span><a id="line.257">                    session.removeAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY);</a>
<span class="sourceLineNo">258</span><a id="line.258">                }</a>
<span class="sourceLineNo">259</span><a id="line.259">                //otherwise not in the session and not authenticated - no need to update the session</a>
<span class="sourceLineNo">260</span><a id="line.260">            }</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">    /**</a>
<span class="sourceLineNo">265</span><a id="line.265">     * Removes any existing subject state from the Subject's session (if the session exists).  If the session</a>
<span class="sourceLineNo">266</span><a id="line.266">     * does not exist, this method does not do anything.</a>
<span class="sourceLineNo">267</span><a id="line.267">     *</a>
<span class="sourceLineNo">268</span><a id="line.268">     * @param subject the subject for which any existing subject state will be removed from its session.</a>
<span class="sourceLineNo">269</span><a id="line.269">     */</a>
<span class="sourceLineNo">270</span><a id="line.270">    protected void removeFromSession(Subject subject) {</a>
<span class="sourceLineNo">271</span><a id="line.271">        Session session = subject.getSession(false);</a>
<span class="sourceLineNo">272</span><a id="line.272">        if (session != null) {</a>
<span class="sourceLineNo">273</span><a id="line.273">            session.removeAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY);</a>
<span class="sourceLineNo">274</span><a id="line.274">            session.removeAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);</a>
<span class="sourceLineNo">275</span><a id="line.275">        }</a>
<span class="sourceLineNo">276</span><a id="line.276">    }</a>
<span class="sourceLineNo">277</span><a id="line.277"></a>
<span class="sourceLineNo">278</span><a id="line.278">    /**</a>
<span class="sourceLineNo">279</span><a id="line.279">     * Removes any existing subject state from the subject's session (if the session exists).</a>
<span class="sourceLineNo">280</span><a id="line.280">     *</a>
<span class="sourceLineNo">281</span><a id="line.281">     * @param subject the Subject instance for which any persistent state should be deleted.</a>
<span class="sourceLineNo">282</span><a id="line.282">     */</a>
<span class="sourceLineNo">283</span><a id="line.283">    public void delete(Subject subject) {</a>
<span class="sourceLineNo">284</span><a id="line.284">        removeFromSession(subject);</a>
<span class="sourceLineNo">285</span><a id="line.285">    }</a>
<span class="sourceLineNo">286</span><a id="line.286">}</a>




























































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