亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Spring Security 框架的前后端分離軟件平臺(tái)構(gòu)建的研究

        2022-03-09 01:50:42崔娟章恒馬堯田全紅金瑞欣馬鵬王小龍楊梓涵張園琳楊元娟陳春霖
        關(guān)鍵詞:用戶名開發(fā)人員代碼

        崔娟* 章恒 馬堯 田全紅 金瑞欣 馬鵬 王小龍 楊梓涵 張園琳 楊元娟 陳春霖

        (甘肅省計(jì)算中心,甘肅 蘭州 730030)

        用Javaweb 開發(fā)時(shí),效率低下、要配置很多的xml 文件,調(diào)試不方便,制約了程序員的開發(fā)效率。對(duì)于開發(fā)的系統(tǒng)而言,其安全性更是關(guān)注的重點(diǎn),從系統(tǒng)上線開始,軟件就承受著各種各樣的攻擊,最常見的sql 注入攻擊,就可以通過使用安全框架Spring Security 解決。傳統(tǒng)的開發(fā)習(xí)慣將后端代碼和前端代碼混合到一起,使得前端和后端開發(fā)人員無法明確的分工,往往開發(fā)人員需要同時(shí)關(guān)注后端代碼邏輯和前端頁(yè)面樣式顯示,增加開發(fā)人員的壓力,同時(shí)也因?yàn)榍岸舜a和后端代碼混合在一起,導(dǎo)致代碼可讀性差,耦合性高,前端樣式的改變需要重啟后端服務(wù),浪費(fèi)開發(fā)人員大量時(shí)間;而前端采用Vue 框架使得開發(fā)人員從繁瑣的DOM 操作中脫離出來,利用springboot 技術(shù)可以很快的開發(fā)出項(xiàng)目。

        1 項(xiàng)目開發(fā)流程

        總體思路:

        開發(fā)一個(gè)系統(tǒng),首先需要了解需求,確定開發(fā)架構(gòu),設(shè)計(jì)數(shù)據(jù)庫(kù),設(shè)計(jì)相應(yīng)的原型圖,根據(jù)業(yè)務(wù)要求,考慮系統(tǒng)的整個(gè)設(shè)計(jì)框架。而作為后端這塊,需要考慮接口的授權(quán)和用戶的身份認(rèn)證問題。根據(jù)Spring Security 安全框架的機(jī)制設(shè)定,除了白名單中的資源,其他的接口都需要身份認(rèn)證的前提下才能訪問成功,若用戶在沒有登錄的情況下在瀏覽器上發(fā)送任何請(qǐng)求,都會(huì)進(jìn)行攔截,提示當(dāng)前是未登錄狀態(tài),需要先登錄。這樣從身份認(rèn)證上第一步保證了系統(tǒng)的安全性。其次當(dāng)用戶登錄成功,即身份驗(yàn)證通過的前提下,后端通過token 判斷登錄狀態(tài),校驗(yàn)成功后判斷用戶角色,為其分配前端菜單資源,以及授權(quán)相應(yīng)的接口資源,若該用戶直接通過url 訪問不屬于他的資源,根據(jù)Spring Security 安全框架機(jī)制,會(huì)攔截其的請(qǐng)求,提示沒有權(quán)限訪問該資源,這樣再次保證了系統(tǒng)數(shù)據(jù)的安全性。而作為前后端分離的項(xiàng)目,一般會(huì)跨端口,跨ip,這樣前端在請(qǐng)求后端接口的時(shí)候,我們需要解決跨域的問題才能讓前后端互通起來,前端調(diào)后端接口才能訪問成功。前后端才能互相訪問,進(jìn)行數(shù)據(jù)交互。

        2 搭建后端項(xiàng)目

        2.1 數(shù)據(jù)持久層

        開發(fā)一個(gè)系統(tǒng),數(shù)據(jù)庫(kù)是必不可少的,它是我們系統(tǒng)的數(shù)據(jù)來源,這里我們選擇MySQL8.0 版本的數(shù)據(jù)庫(kù),在傳統(tǒng)的后端和數(shù)據(jù)庫(kù)關(guān)系中,Java 類和數(shù)據(jù)庫(kù)中的字段沒有一一對(duì)應(yīng)的關(guān)系。如果需要將一個(gè)對(duì)象插入數(shù)據(jù)庫(kù)中,需要先從對(duì)象中獲取出來,寫對(duì)應(yīng)的sql 語(yǔ)句,再一個(gè)字段一個(gè)字段的插入數(shù)據(jù)庫(kù)的表中,而現(xiàn)在根據(jù)數(shù)據(jù)持久層JPA 或者M(jìn)ybatis或Mybatis-plus,將java 中的實(shí)體類和數(shù)據(jù)庫(kù)中的表進(jìn)行映射,使得實(shí)體類的屬性和表字段一一對(duì)應(yīng)起來,這樣可以很快的操作數(shù)據(jù)庫(kù),簡(jiǎn)化了數(shù)據(jù)庫(kù)的設(shè)計(jì)和實(shí)體類的創(chuàng)建。數(shù)據(jù)庫(kù)持久層JPA 是通過在后端代碼中創(chuàng)建類,通過注解@Entity 標(biāo)明該類是個(gè)實(shí)體類,可以根據(jù)自定義的駝峰命名規(guī)則,在運(yùn)行項(xiàng)目的時(shí)候會(huì)自動(dòng)在數(shù)據(jù)庫(kù)中創(chuàng)建出對(duì)應(yīng)的表,而Mybatis 和Mybatis-plus 被稱為逆向工程,則剛好相反,先創(chuàng)建數(shù)據(jù)庫(kù),設(shè)計(jì)表字段,然后運(yùn)行項(xiàng)目生成對(duì)應(yīng)的實(shí)體類。本文以Mybatis 數(shù)據(jù)庫(kù)持久層為例,進(jìn)行項(xiàng)目講解。

        2.2 創(chuàng)建spring boot 項(xiàng)目

        2.2.1 創(chuàng)建數(shù)據(jù)庫(kù)實(shí)體類

        通過開發(fā)工具idea 創(chuàng)建spring 父項(xiàng)目,再創(chuàng)建數(shù)據(jù)持久層Mybatis 和業(yè)務(wù)邏輯兩個(gè)模塊,MyBatis 模塊引入相應(yīng)的pom 依賴,編寫mybatis 生成器主函數(shù)。

        在resource 目錄下配置相應(yīng)的xml 文件, 將xml 中的tableName 值賦值為%,運(yùn)行該模塊主函數(shù),將生成跟數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)體類,mapper 接口,xml 文件。

        2.2.1.1 實(shí)體類就是跟數(shù)據(jù)庫(kù)中表映射,若是修改實(shí)體類的字段,需要重新加載對(duì)應(yīng)的表,進(jìn)行覆蓋。

        2.2.1.2 mapper 接口,定義了一些基本操作數(shù)據(jù)庫(kù)的接口,具體實(shí)現(xiàn)和生成的mapperXml 文件對(duì)應(yīng),該xml 文件就是操作數(shù)據(jù)庫(kù)的sql 文件。后續(xù)根據(jù)業(yè)務(wù)的需要,自定義的sql 查詢語(yǔ)句就可以放到該xml 文件中。

        引入數(shù)據(jù)庫(kù)持久層Mybatis 后,對(duì)數(shù)據(jù)庫(kù)的基本增刪改查就不需要再編寫,mapper 接口幫我們已經(jīng)自動(dòng)生成了簡(jiǎn)單的增刪改查接口。簡(jiǎn)化了我們編寫大量重復(fù)的sql 文件,而且可以將代碼邏輯層和sql 語(yǔ)句分開,使得代碼更清晰。

        2.2.2 身份認(rèn)證

        一個(gè)系統(tǒng)有登錄就有認(rèn)證,認(rèn)證就是對(duì)身份的校驗(yàn),傳統(tǒng)的登錄認(rèn)證機(jī)制是通過session 和cookie 進(jìn)行身份識(shí)別,由于cookie 無法進(jìn)行跨域訪問,本文引入token 機(jī)制。通過jwt令牌生成token, 進(jìn)行身份認(rèn)證。JWT 的全稱是 Json Web Token,是一種JSON 風(fēng)格的輕量級(jí)的授權(quán)和身份認(rèn)證規(guī)范,實(shí)現(xiàn)了無狀態(tài)、分布式的Web 應(yīng)用授權(quán),它的數(shù)據(jù)格式有三部分組成,頭部、荷載和簽名。荷載主要包括登錄用戶的賬號(hào)信息,token 創(chuàng)建時(shí)間,主題等。簽名是放入自己的密鑰,對(duì)整個(gè)token 進(jìn)行驗(yàn)證。生成的token 數(shù)據(jù)格式如圖1 所示,在該項(xiàng)目中我們需要引入security 和jwt 兩個(gè)依賴。

        圖1

        在本系統(tǒng)中身份認(rèn)證流程圖如2 所示。

        圖2

        2.2.2.1 用戶通過客戶端輸入用戶名和密碼,發(fā)送請(qǐng)求到后端。后端根據(jù)輸入的用戶名和密碼進(jìn)行校驗(yàn),通過userDetailsService.loadUserByUsername(userName)的方法去查詢,如果匹配,那么根據(jù)這個(gè)用戶名生成對(duì)應(yīng)的token,然后將這個(gè)token 值返回給前端。

        2.2.2.2 前端保存這個(gè)token,然后每次請(qǐng)求后端接口的時(shí)候,將這個(gè)token 放在請(qǐng)求頭Header 當(dāng)中,參數(shù)名為Authorization。

        2.2.2.3 前端再次發(fā)送請(qǐng)求,后端就會(huì)先根據(jù)Jwt 相關(guān)的攔截器進(jìn)行攔截,判斷請(qǐng)求頭中是否攜帶這個(gè)Authorization,如果沒有,進(jìn)行攔截,給前端返回尚未登錄,拒絕訪問等信息。如果有,則進(jìn)行判斷token 值是否有效。token 有效從兩個(gè)方面進(jìn)行判斷,一是token 的荷載中攜帶的用戶名和系統(tǒng)當(dāng)前UserDetails 中的用戶名是否一致,二是token 中的失效時(shí)間是否在當(dāng)前系統(tǒng)的時(shí)間之前,如果都滿足條件則證明從前端傳過來的token 值有效,系統(tǒng)不進(jìn)行攔截,正常訪問后端接口,若無效,則攔截,提示給前端需要登錄才能訪問。

        2.2.3 Spring Security 授權(quán)

        使用Spring Security 安全框架,解決的問題就是授權(quán)和認(rèn)證,身份認(rèn)證完成之后就是授權(quán),授權(quán)其實(shí)就是給不同的用戶分配不同的權(quán)限,這個(gè)權(quán)限可以從兩個(gè)方面進(jìn)行理解,一是角色擁有哪些菜單資源,二是角色擁有哪些接口資源,比如某個(gè)角色用戶擁有賬戶管理菜單,但是沒有分配對(duì)應(yīng)的接口資源,那么他只能看到該頁(yè)面的樣子,但是不能調(diào)用該頁(yè)面上涉及的接口,操作該頁(yè)面上的數(shù)據(jù)資源,如圖3 所示。

        圖3

        對(duì)于一個(gè)用戶請(qǐng)求接口,權(quán)限控制進(jìn)行如下判斷:第一根據(jù)用戶獲取角色列表,第二根據(jù)請(qǐng)求的url 地址判斷需要的角色,第三將前兩步中的角色進(jìn)行對(duì)比,如果有交叉關(guān)系,說明有相應(yīng)的權(quán)限,那么該用戶就可以請(qǐng)求該接口地址,獲取數(shù)據(jù)。否則沒有權(quán)限。

        3 搭建前端項(xiàng)目

        3.1 解決跨域問題

        在開發(fā)工具WebStrom 下創(chuàng)建vue 項(xiàng)目,因?yàn)榍昂蠖朔蛛x,無法相互通信,為了能成功訪問到后端接口,我們需要解決跨域的問題,有兩中解決思路,一種是在后端代碼中配置,另一種是前端配置代理,前端解決思路是新建一個(gè)js 文件,配置如圖4 所示代碼,將target 中的地址換成后端服務(wù)器上的IP 和端口號(hào)。

        圖4

        3.2 前后端數(shù)據(jù)交互問題

        前后端數(shù)據(jù)交互,我們采用的是json 格式,json 是一種輕量級(jí)的數(shù)據(jù)交換格式,JSON 獨(dú)立于語(yǔ)言:JSON 使用Javascript 語(yǔ)法來描述數(shù)據(jù)對(duì)象,JSON 解析器和JSON 庫(kù)支持許多不同的編程語(yǔ)言。目前非常多的動(dòng)態(tài)(PHP,JSP,.NET)編程語(yǔ)言都支持JSON。

        對(duì)于登錄的接口來說,后端需要前端傳過來一個(gè)對(duì)象,這個(gè)對(duì)象包括兩個(gè)屬性,用戶名username 和密碼password,那么前端就需要定義好這個(gè)對(duì)象,loginForm: { username: '',password: ''},需要注意的是前后端定義的這個(gè)屬性名必須一致,后端用的是username,那么前端也必須用username,否則請(qǐng)求后端接口會(huì)失敗。

        因?yàn)樯矸菡J(rèn)證問題,后端需要攔截前端這邊的請(qǐng)求,查看請(qǐng)求頭里面是否攜帶Authorization,那么前端需要在登錄成功,拿到返回值之后,將這個(gè)token 寫到請(qǐng)求頭里面,然后每次請(qǐng)求的時(shí)候都攜帶這個(gè)token。前端需要做如下兩個(gè)步驟:

        (1)將登錄接口返回的對(duì)象我們可以選擇放到Session Storage 或者Cookies 中保存下來

        (2)配置請(qǐng)求攔截器,每次前端發(fā)起請(qǐng)求,都走這個(gè)攔截器,如果第一個(gè)步驟中有值,就將里面的token 放到請(qǐng)求頭里面,如圖5 所示,這樣每次請(qǐng)求都帶這個(gè)請(qǐng)求頭,如圖6 所示。

        圖5

        圖6

        4 結(jié)論

        系統(tǒng)安全問題一直是開發(fā)人員考慮的重中之重,結(jié)合spring Security 安全框架的使用,從身份認(rèn)證和授權(quán)上,可以很大程度的保護(hù)我們程序的安全性。而基于當(dāng)下流行的前后端分離模式的開發(fā),更是每個(gè)開發(fā)人員所必須掌握的技術(shù),本文從數(shù)據(jù)庫(kù),后端項(xiàng)目編寫,前端數(shù)據(jù)請(qǐng)求等方面介紹了基于Spring Security 的前后端分離模式開發(fā)流程,理清開發(fā)思路,能夠快速上手開發(fā)出基于spring boot 的項(xiàng)目,在后續(xù)項(xiàng)目上集成Redis,ELK 日志等插件的使用進(jìn)行擴(kuò)展,也能夠快速打成jar 包,利用docker 進(jìn)行部署在服務(wù)器上使用。

        猜你喜歡
        用戶名開發(fā)人員代碼
        《護(hù)士進(jìn)修雜志》投稿程序
        Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        機(jī)智的快遞員
        讓W(xué)indows 10進(jìn)入開發(fā)者模式
        電腦迷(2015年12期)2015-04-29 23:22:51
        后悔了?教你隱藏開發(fā)人員選項(xiàng)
        電腦愛好者(2015年6期)2015-04-03 01:20:56
        三星SMI擴(kuò)展Java論壇 開發(fā)人員可用母語(yǔ)
        亚洲欧洲日本综合aⅴ在线| 国产视频精品一区白白色| АⅤ天堂中文在线网| 日韩精品夜色二区91久久久| 日韩在线精品免费观看| 日本免费在线一区二区三区| 久久99亚洲精品久久久久| 性无码专区无码| 韩国19禁主播深夜福利视频| 久久av高潮av喷水av无码 | 免费国产在线精品三区| 国产一区二区三区护士| 手机免费在线观看av网址| 亚洲国产美女精品久久久久∴| 又黄又硬又湿又刺激视频免费| 中文字幕有码无码av| 五月中文字幕| 青青草手机成人自拍视频| 国产精品一区二区三区在线观看| 一区二区三区美女免费视频 | 久久久久久伊人高潮影院| 久久亚洲黄色| 无码中文字幕av免费放| 国产精品一级av一区二区 | 男人的天堂中文字幕熟女人妻 | 欧美喷潮久久久xxxxx| 中文字幕久久久人妻无码| 日本二区三区视频免费观看| 日本中文字幕精品久久| 亚洲精品一区二区三区麻豆| 国产性生大片免费观看性| 首页 综合国产 亚洲 丝袜| 欧美婷婷六月丁香综合色| 国产在线精品一区二区在线看| 精品国产日韩无 影视| 亚洲av高清一区二区| 久久伊人这里都是精品| 国产美女精品一区二区三区| 日本www一道久久久免费榴莲 | 国产激情一区二区三区在线蜜臀| av在线一区二区三区不卡|