亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Springboot整合SpringSecurity實現賬號密碼和手機驗證碼登陸功能

發布時間:2021-07-29 19:11:21 來源:億速云 閱讀:457 作者:chen 欄目:大數據

這篇文章主要講解了“怎么用Springboot整合SpringSecurity實現賬號密碼和手機驗證碼登陸功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用Springboot整合SpringSecurity實現賬號密碼和手機驗證碼登陸功能”吧!

SpringSecurity 是 Spring 提供安全管理框架。核心內容包含認證授權攻擊防護。實際上SpringSecurity 已經發展了多年了,但是在 SSM/SSH 中整合 SpringSecurity 相較于 Shiro 來說顯得要麻煩很多,所以在安全管理框架這塊一直都是 Shiro 的天下。

自從有了 SpringBoot ,SpringSecurity 的完美兼容讓其價值完整的體現了出來。在 SpringBoot 中基本零配置就可以使用 SpringSecurity了。

示例說明

網上教程一大堆,一知半解導致寫的錯誤一大堆,出錯了又要去搜索,知識點越來越多,陷入惡性循環。

這里提供一個完整Demo ,雖然不一定說完全理解SpringSecurity,但是可以了解其運行方式。

示例中提供了 2 種認證方式,賬號密碼手機驗證碼,請根據需要自定義。

版本

  • SpringBoot 2.3.3

  • JDK 1.8

  • Mybatis 2.1.3

  • Mysql 5.7+

示例安裝

  • 下載 Demo

    • GitHub : https://github.com/liuqi0725/springboot-useful/tree/master/springboot-security

    • Gitee : https://gitee.com/alexliu0725/springboot-useful/tree/master/springboot-security

  • 修改 application.yaml 端口數據庫 等配置

  • 啟動后在不同的客戶端機器上訪問 http://localhost:8080 (根據自己配置的端口訪問)

  • 測試用2 種登陸方式: 用戶密碼、手機驗證碼

  • 查看不同用戶菜單是否不一樣(測試授權)

  • 訪問不存在的路由地址,查看返回值

為避免遷移腳本沖突,如果不建多個數據庫腳本的情況為,請先清空數據庫里的內容

Spring-security 介紹

Spring Security 官方說明

Spring Security 官方文檔

Spring Security 參考手冊-中文

為什么不用 shiro

之前SSM/SSH 一直用 Shiro。后面慢慢過渡到 SpringBoot 后,改用了 SpringSecurity。然后就沒有然后了。Spring 真的好用,教程也全。 再說中型項目后續會涉及集群或微服務,security、cloud 打包用一套不香么。

Spring-Security 做用戶認證、授權

以下是我對這兩點膚淺的認識。不包含 SSO、OAuth 等。后續會在其他文章中介紹。

編碼分為 2 大塊 access(訪問)authenticaton(認證)

  • access 會放過白名單,對非白名單的請求進行認證,認證的依據來源(權限、角色...),沒有則返回 403

  • authenticaton 用戶訪問一個需要授權的 URL 時,會進行用戶認證,認證通過后再通過 access 去判斷是否可以訪問**(授權)**

怎么用Springboot整合SpringSecurity實現賬號密碼和手機驗證碼登陸功能

CSRF 跨站請求偽造防護

Demo 中沒有開啟 csrf。 如果需要可以自行開啟。

開啟后,通過如下代碼獲取

<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}">
或者放在head 中
<head> 
	<meta  name = “_csrf” content = “${_csrf.token}” /> 
	<meta  name = “_csrf_header”  content = “${_csrf.headerName}” /> 
</head>

iframe 嵌入

SpringSecurity 默認是關閉了 frame 的嵌入的,可以開啟。

參考 Demo 代碼 SecurityWebConfigsetFrameAllow(http) 方法

private void setFrameAllow(HttpSecurity http) throws Exception {

        /*
         * iframe 允許顯示的方式 <br>
         * SAMEORIGIN 僅允許 frame 頁面當前域名下的顯示 <br>
         *
         * FROMURI 允許 frame 頁面在指定域名下顯示 <br>
         *     例如:
         *     <ul>
         *          <li>http://www.baidu.com 允許該域名可以嵌套我的 frame</li>
         *          <li>http://www.taobao.com 允許該域名可以嵌套我的 frame</li>
         *     </ul>
         */

        // 正式環境請配置在配置文件中。方便管理

        String xframe = "SAMEORIGIN";
        // 如果是 FROMURI 允許嵌套的外部域名白名單
        String[] frameAllowWhiteDomain = new String[]{"https://example.cn","https://example.com"};

        if(xframe.equals("SAMEORIGIN")){
            // 僅允許本域名
            http.headers().frameOptions().sameOrigin();
        }else if(xframe.equals("FROMURI")){
            //disable 默認策略。 這一句不能省。
            http.headers().frameOptions().disable();
            //新增新的策略。
            http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(
                    new WhiteListedAllowFromStrategy(Arrays.asList(frameAllowWhiteDomain))
            ));
        }else{
            throw new Exception("未知的 XFrameOptions 。僅支持 SAMEORIGIN , FROMURI");
        }
    }

提升用戶、編碼體驗

  1. 異常處理

    Demo 中并沒有做全局的統一異常處理,在正式項目中,可以通過全局的異常處理來提升錯誤后的用戶體驗。通過以下 2 點可以實現,view 訪問返回錯誤 view,json 訪問返回錯誤 json

    	// 處理 spring `/error` 
        @Controller
        @RequestMapping({"${server.error.path:${error.path:/error}}"})
        public class SpringErrorProcessController extends AbstractErrorController {
            ...
        }
    
        // 處理 Controller 層錯誤
        @ControllerAdvice
        public class ControllerExceptionHandler{
    
        }


  2. 自定義配置 SpringSecurity 中還是有很多參數的,比如白名單,開啟 csrf、iframe 都是可以通過配置實現,這樣換一個項目不用把代碼又改一堆。可以通過 @ConfigurationProperties 實現 spring 配置,在 spring 加載時讀取。

  3. 靈活的設計 SpringSecurity 只提供了工具,具體的實現還是要在項目(可以理解為第三方)中去實現,比如 Demo 中的CustomerSecurityAuthenticationProcessService,CustomerPasswordService 等。這些都是需要在啟動時注入到SpringSecurity 中的,如何將這些類在啟動時獲取到實體,或者根據獲取內容讓 SpringSecurity 實現其他的邏輯。

感謝各位的閱讀,以上就是“怎么用Springboot整合SpringSecurity實現賬號密碼和手機驗證碼登陸功能”的內容了,經過本文的學習后,相信大家對怎么用Springboot整合SpringSecurity實現賬號密碼和手機驗證碼登陸功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五河县| 遵义市| 宝兴县| 怀柔区| 林西县| 论坛| 安仁县| 万安县| 宁国市| 区。| 治县。| 浮山县| 修水县| 探索| 砀山县| 澄江县| 乡宁县| 泰顺县| 永善县| 玛纳斯县| 西乌珠穆沁旗| 云南省| 静海县| 怀柔区| 东丽区| 福海县| 三都| 五原县| 和田市| 海宁市| 安国市| 左贡县| 铜川市| 西华县| 句容市| 青冈县| 什邡市| 荣成市| 高邑县| 靖江市| 通许县|