<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                最基本的對象是`SecurityContextHolder`。 這是我們存儲應用程序當前安全上下文的詳細信息的地方,其中包括當前使用該應用程序的主體的詳細信息。 默認情況下,`SecurityContextHolder`使用`ThreadLocal`來存儲這些詳細信息,這意味著安全上下文始終可用于同一執行線程中的方法,即使安全上下文未作為這些方法的參數顯式傳遞。 如果在處理當前主體的請求之后注意清除線程,以這種方式使用ThreadLocal是非常安全的。 當然,Spring Security會自動為您解決這個問題,因此無需擔心。 某些應用程序并不完全適合使用`ThreadLocal`,因為它們使用線程的特定方式。 例如,Swing客戶端可能希望Java虛擬機中的所有線程都使用相同的安全上下文。 `SecurityContextHolder`可以在啟動時配置策略,以指定您希望如何存儲上下文。 對于獨立應用程序,您將使用`SecurityContextHolder.MODE_GLOBAL`策略。 其他應用程序可能希望安全線程生成的線程也采用相同的安全標識。 這是通過使用`SecurityContextHolder.MODE_INHERITABLETHREADLOCAL`實現的。 您可以通過兩種方式從默認的`SecurityContextHolder.MODE_THREADLOCAL`更改模式。 第一個是設置系統屬性,第二個是在`SecurityContextHolder`上調用靜態方法。 大多數應用程序不需要更改默認值,但如果這樣做,請查看JavaDoc for `SecurityContextHolder`以了解更多信息。 ## 獲取有關當前用戶的信息 在`SecurityContextHolder`中,我們存儲當前與應用程序交互的主體的詳細信息。 Spring Security使用`Authentication`對象來表示此信息。 您通常不需要自己創建`Authentication`對象,但用戶查詢`Authentication`對象是相當常見的。 您可以使用以下代碼塊(從應用程序的任何位置)獲取當前經過身份驗證的用戶的名稱,例如: ~~~ Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { String username = ((UserDetails)principal).getUsername(); } else { String username = principal.toString(); } ~~~ 調用`getContext()`返回的對象是`SecurityContext`接口的一個實例。 這是保存在線程本地存儲中的對象。 正如我們將在下面看到的,Spring Security中的大多數身份驗證機制都會返回`UserDetails`的實例作為主體。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看