<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Spring Security – JDBC 用戶服務示例 > 原文: [https://howtodoinjava.com/spring-security/jdbc-user-service-based-spring-security-example/](https://howtodoinjava.com/spring-security/jdbc-user-service-based-spring-security-example/) 在先前的[**與 spring 3 安全演示應用程序有關的帖子**](https://howtodoinjava.com/spring/spring-security/login-form-based-spring-3-security-example/)中,使用了配置文件中的默認用戶服務,我們了解了如何在登錄頁面后面保護應用程序。 在那篇文章中,用戶名和密碼存儲在`application-security.xml`文件本身中。 現在是時候取消配置這些身份驗證參數并將其存儲在數據庫中了。 有兩種方法可以執行此操作,即使用自定義用戶服務實現或 spring 提供的 **jdbc 用戶服務**。 在這篇文章中,我將展示使用第二種方法的方法,即 jdbc 用戶服務。 ```java Sections in this post: Create tables in database Update security configuration to use jdbc user service Test the application ``` ## **背景信息** 除了 spring 容器中其他內置的用戶詳細信息服務之外,JDBC 用戶詳細信息實現也是其中之一。 使用標簽`jdbc-user-service`進行配置。 就像其他 spring 功能一樣,這也附帶了可以使用的默認實現,例如 ```java <authentication-manager alias="authenticationManager"> <authentication-provider> <jdbc-user-service data-source-ref="dataSource" /> </authentication-provider> </authentication-manager> ``` 以上定義將使用已配置數據庫中的默認表。 它假定為: ```java create table users( username varchar_ignorecase(50) not null primary key, password varchar_ignorecase(50) not null, enabled boolean not null); create table authorities ( username varchar_ignorecase(50) not null, authority varchar_ignorecase(50) not null, constraint fk_authorities_users foreign key(username) references users(username)); create unique index ix_auth_username on authorities (username,authority); ``` 但是,在我的示例中,我根據自己的選擇創建了兩個表,并決定使用 sql 查詢將數據提供給 jdbc 用戶服務。 ## **在數據庫中創建表** 因此,讓我們在數據庫中創建我們自己的表: ```java -- ---------------------------- -- Table structure for `tbl_users` -- ---------------------------- DROP TABLE IF EXISTS `tbl_users`; CREATE TABLE `tbl_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `password` varchar(20) NOT NULL, `enabled` int(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ``` 用于存儲角色和用戶名映射的表。 ```java -- ---------------------------- -- Table structure for `tbl_user_role` -- ---------------------------- DROP TABLE IF EXISTS `tbl_user_role`; CREATE TABLE `tbl_user_role` ( `userid` int(11) NOT NULL, `rolename` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ``` 這些表具有所有必需的信息,例如用戶名,密碼,啟用狀態和分配的角色。 JDBC 用戶服務僅對作為參數提供的用戶名需要這些值。這些值將通過以下 sql 查詢獲取: ```java SELECT USERNAME, PASSWORD, CASE ENABLED WHEN 1 THEN 'true' ELSE 'false' END 'ENABLED' FROM TBL_USERS WHERE USERNAME=?; +----------+----------+---------+ | USERNAME | PASSWORD | ENABLED | +----------+----------+---------+ | lokesh | password | true | +----------+----------+---------+ ``` 查詢以選擇角色名稱。 ```java SELECT u.USERNAME, r.ROLENAME FROM TBL_USERS u, TBL_USER_ROLE r WHERE u.ID = r.USERID AND u.USERNAME=?; +----------+-----------+ | USERNAME | ROLENAME | +----------+-----------+ | lokesh | ROLE_USER | +----------+-----------+ ``` ## **更新安全性配置以使用 jdbc 用戶服務** 可以按照以下步驟進行: ```java <authentication-manager alias="authenticationManager"> <authentication-provider> <jdbc-user-service data-source-ref="dataSource" users-by-username-query=" SELECT USERNAME, PASSWORD, CASE ENABLED WHEN 1 THEN 'true' ELSE 'false' END 'ENABLED' FROM TBL_USERS WHERE USERNAME=?;" authorities-by-username-query=" SELECT u.USERNAME, r.ROLENAME FROM TBL_USERS u, TBL_USER_ROLE r WHERE u.ID = r.USERID AND u.USERNAME=?;" /> </authentication-provider> </authentication-manager> ``` JDBC 用戶服務實現提供了這兩個屬性,以使用戶名與密碼匹配,然后使用戶名與授予的角色或權限匹配。 1. 用戶按用戶名查詢 2. 通過用戶名查詢權限 ## **測試應用程序** 現在,在應用程序服務器中再次構建并在應用程序之上運行。 它將完全符合[**先前教程**](https://howtodoinjava.com/spring/spring-security/login-form-based-spring-3-security-example/) 中 xml 配置的身份驗證/授權的工作方式。 **祝您學習愉快!**
                  <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>

                              哎呀哎呀视频在线观看