国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt

這篇具有很好參考價(jià)值的文章主要介紹了基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

??博主介紹:?CSDN特邀作者、985計(jì)算機(jī)專業(yè)畢業(yè)、某互聯(lián)網(wǎng)大廠高級(jí)全棧開發(fā)程序員、碼云/掘金/華為云/阿里云/InfoQ/StackOverflow/github等平臺(tái)優(yōu)質(zhì)作者、專注于Java、小程序、前端、python等技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn),以及程序定制化開發(fā)、全棧講解、就業(yè)輔導(dǎo)、面試輔導(dǎo)、簡(jiǎn)歷修改。???

???? 精彩專欄 推薦訂閱????
2023-2024年最值得選的微信小程序畢業(yè)設(shè)計(jì)選題大全:100個(gè)熱門選題推薦?

2023-2024年最值得選的Java畢業(yè)設(shè)計(jì)選題大全:500個(gè)熱門選題推薦?

Java精品實(shí)戰(zhàn)案例《500套》

微信小程序項(xiàng)目精品案例《500套》
Java核心技術(shù)精選
Java框架精選
??文末獲取源碼+數(shù)據(jù)庫(kù)??
感興趣的可以先收藏起來,還有大家在畢設(shè)選題,項(xiàng)目以及論文編寫等相關(guān)問題都可以給我留言咨詢,希望幫助更多的人

詳細(xì)視頻演示

請(qǐng)聯(lián)系我獲取更詳細(xì)的演示視頻

具體實(shí)現(xiàn)截圖

基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js

技術(shù)棧

后端框架SpringBoot

Spring Boot是基于Spring Framework的開發(fā)框架,具有許多優(yōu)勢(shì)。它內(nèi)置了Tomcat、Jetty和Undertow等服務(wù)器,可以直接使用而無需額外安裝和配置。最重要的是,Spring Boot具有強(qiáng)大的自動(dòng)配置功能,能根據(jù)項(xiàng)目依賴自動(dòng)配置應(yīng)用程序,大大簡(jiǎn)化了開發(fā)過程。此外,Spring Boot還提供了豐富的開箱即用功能和插件,如Spring Data、Spring Security和Spring Cloud等,使得開發(fā)者能夠更快速地構(gòu)建應(yīng)用程序,并輕松擴(kuò)展和集成其他技術(shù)。除此之外,Spring Boot還具有靈活的配置管理、快速開發(fā)和部署、優(yōu)秀的社區(qū)支持、監(jiān)控和診斷工具以及可靠的測(cè)試支持等功能。這些優(yōu)勢(shì)使得Spring Boot成為流行的框架,能夠幫助開發(fā)者更快、更輕松地構(gòu)建高質(zhì)量的應(yīng)用程序,并提供良好的可配置性、可擴(kuò)展性和可維護(hù)性。

下面是核心代碼的示例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }

    @GetMapping("/hello")
    public String helloWorld() {
        return "Hello, World!";
    }
}

這段代碼定義了一個(gè)Spring Boot應(yīng)用程序的入口類HelloWorldApplication,使用@SpringBootApplication注解標(biāo)記為一個(gè)Spring Boot應(yīng)用程序,并使用@RestController注解將該類標(biāo)記為一個(gè)RESTful控制器。

在控制器中,我們定義了一個(gè)helloWorld方法,并使用@GetMapping注解將該方法映射到"/hello"路徑,當(dāng)訪問該路徑時(shí),該方法會(huì)返回一個(gè)簡(jiǎn)單的字符串"Hello, World!"作為響應(yīng)。

通過SpringApplication.run方法啟動(dòng)應(yīng)用程序后,Spring Boot會(huì)自動(dòng)配置并啟動(dòng)內(nèi)嵌的服務(wù)器,我們可以通過訪問"http://localhost:8080/hello"來調(diào)用helloWorld方法,并得到"Hello, World!"作為響應(yīng)。

這個(gè)示例展示了一個(gè)最簡(jiǎn)單的Spring Boot應(yīng)用程序,你可以根據(jù)自己的需求進(jìn)一步擴(kuò)展和定制代碼。希望這個(gè)示例能幫助你更好地理解Spring Boot的核心代碼。

前端框架Vue

Vue.js是一種流行的JavaScript框架,它具有許多優(yōu)勢(shì)。其中,Vue.js的核心優(yōu)勢(shì)之一是虛擬DOM技術(shù)。虛擬DOM是一個(gè)內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),它在實(shí)現(xiàn)高效的DOM操作方面發(fā)揮了重要作用。

Vue.js采用了響應(yīng)式數(shù)據(jù)綁定、虛擬DOM、組件化等現(xiàn)代化技術(shù),為開發(fā)者提供了一種靈活、高效、易于維護(hù)的開發(fā)模式。當(dāng)數(shù)據(jù)發(fā)生變化時(shí),Vue.js能夠自動(dòng)更新UI,開發(fā)者無需手動(dòng)更新UI,從而能夠更加專注于數(shù)據(jù)處理。

下面是一個(gè)示例代碼,演示了Vue.js的核心功能:

<!DOCTYPE html>
<html>
<head>
  <title>Vue.js Demo</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <h2>{{ message }}</h2>
    <button @click="changeMessage">Change Message</button>
  </div>

  <script>
    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello, Vue.js!'
      },
      methods: {
        changeMessage: function() {
          this.message = 'Vue.js is awesome!';
        }
      }
    });
  </script>
</body>
</html>

在這個(gè)示例中,我們創(chuàng)建了一個(gè)Vue實(shí)例,并將其綁定到頁面上的一個(gè)元素(id為"app")。通過data屬性,我們定義了一個(gè)名為message的變量,并將其初始值設(shè)為"Hello, Vue.js!"。在頁面上,我們使用雙花括號(hào)語法({{ message }})將message的值顯示出來。通過methods屬性,我們定義了一個(gè)名為changeMessage的方法,當(dāng)點(diǎn)擊按鈕時(shí),該方法會(huì)修改message的值。由于Vue.js的響應(yīng)式數(shù)據(jù)綁定機(jī)制,一旦message的值發(fā)生變化,頁面上顯示的內(nèi)容也會(huì)自動(dòng)更新。

通過這個(gè)示例,我們可以看到Vue.js的簡(jiǎn)潔、靈活和高效的特點(diǎn)。它使得開發(fā)者能夠更加輕松地處理數(shù)據(jù)和UI之間的關(guān)系,提高開發(fā)效率。無論是構(gòu)建小型應(yīng)用還是大型復(fù)雜的單頁應(yīng)用,Vue.js都是一個(gè)值得考慮的選擇。

持久層框架MyBaits

MyBatis是一個(gè)開源的持久層框架,它可以幫助開發(fā)者簡(jiǎn)化數(shù)據(jù)庫(kù)操作的編寫和管理。MyBatis的核心思想是將SQL語句和Java代碼分離,通過XML或注解的方式來描述數(shù)據(jù)庫(kù)操作,從而實(shí)現(xiàn)了數(shù)據(jù)訪問層的解耦和靈活性。

MyBatis的優(yōu)勢(shì)主要包括以下幾點(diǎn):

  1. 簡(jiǎn)化數(shù)據(jù)庫(kù)操作:MyBatis通過提供強(qiáng)大的SQL映射功能,可以將Java對(duì)象與數(shù)據(jù)庫(kù)表進(jìn)行映射,開發(fā)者無需手動(dòng)編寫繁瑣的SQL語句,大大簡(jiǎn)化了數(shù)據(jù)庫(kù)操作的編寫和維護(hù)。

  2. 靈活的SQL控制:MyBatis支持動(dòng)態(tài)SQL,可以根據(jù)不同的條件和邏輯來動(dòng)態(tài)生成SQL語句,使得查詢、更新等操作更加靈活和可控。

  3. 緩存支持:MyBatis提供了一級(jí)緩存和二級(jí)緩存的支持,可以有效減少數(shù)據(jù)庫(kù)的訪問次數(shù),提高系統(tǒng)性能。

  4. 可擴(kuò)展性強(qiáng):MyBatis采用插件機(jī)制,可以方便地?cái)U(kuò)展和定制自己的功能,滿足各種不同的業(yè)務(wù)需求。

系統(tǒng)測(cè)試

為了確保我們的系統(tǒng)達(dá)到最高的質(zhì)量標(biāo)準(zhǔn),本系統(tǒng)進(jìn)行了全方位的測(cè)試。我們的目標(biāo)是從多個(gè)角度發(fā)現(xiàn)系統(tǒng)中存在的問題,并及時(shí)進(jìn)行改進(jìn),以確保系統(tǒng)的完整性和可靠性。

通過功能測(cè)試,能夠找出系統(tǒng)中的潛在缺陷,并對(duì)其進(jìn)行修復(fù)。這樣可以確保我們的系統(tǒng)能夠無缺陷地運(yùn)行,滿足客戶的需求。我們積極尋找問題和不足之處,并及時(shí)采取措施進(jìn)行改進(jìn)。

在測(cè)試過程中,我們不僅僅關(guān)注系統(tǒng)的功能性,還注重系統(tǒng)是否滿足用戶的需求。通過這些測(cè)試,我們能夠準(zhǔn)確地評(píng)估系統(tǒng)的性能,并得出測(cè)試結(jié)論。我們的目標(biāo)是確保系統(tǒng)的質(zhì)量和穩(wěn)定性,為用戶提供優(yōu)質(zhì)的體驗(yàn)。

我們不斷努力,持續(xù)優(yōu)化我們的系統(tǒng),以滿足用戶的期望和需求。我們將繼續(xù)進(jìn)行測(cè)試和改進(jìn),以確保我們的系統(tǒng)始終處于最佳狀態(tài)。

系統(tǒng)測(cè)試目的

在管理系統(tǒng)的開發(fā)周期中,系統(tǒng)測(cè)試是至關(guān)重要的環(huán)節(jié)。它是確保系統(tǒng)質(zhì)量和可靠性的最后一道關(guān)卡,也是整個(gè)開發(fā)過程的最后一次檢查。

系統(tǒng)測(cè)試的主要目的是避免用戶在使用過程中遇到問題,提升用戶體驗(yàn)。我們需要從多個(gè)角度和思路出發(fā),考慮系統(tǒng)可能遇到的問題,并通過模擬不同的場(chǎng)景來發(fā)現(xiàn)缺陷并解決問題。測(cè)試過程中,我們也可以評(píng)估系統(tǒng)的質(zhì)量情況,檢查系統(tǒng)功能是否完備,邏輯是否順暢。一次成功的系統(tǒng)測(cè)試將極大地提升系統(tǒng)的質(zhì)量和用戶體驗(yàn)。

測(cè)試的目標(biāo)是驗(yàn)證系統(tǒng)是否符合需求規(guī)格說明書的定義,并找出與需求規(guī)格說明書不符或沖突的內(nèi)容。在測(cè)試過程中,我們始終站在用戶的角度考慮問題,避免浪費(fèi)時(shí)間在一些不切實(shí)際的場(chǎng)景上,以確保預(yù)期結(jié)果與實(shí)際結(jié)果一致。

本系統(tǒng)致力于保障系統(tǒng)的質(zhì)量和穩(wěn)定性,優(yōu)化用戶的使用體驗(yàn)。通過系統(tǒng)測(cè)試,能夠及時(shí)發(fā)現(xiàn)并解決問題,確保系統(tǒng)符合用戶需求,并提供最佳的服務(wù)。我們將持續(xù)努力,提高系統(tǒng)的可靠性和用戶滿意度。

系統(tǒng)功能測(cè)試

系統(tǒng)功能測(cè)試是對(duì)系統(tǒng)功能模塊進(jìn)行的測(cè)試過程。通過點(diǎn)擊、輸入邊界值、驗(yàn)證必填項(xiàng)和非必填項(xiàng)等方法進(jìn)行黑盒測(cè)試。編寫測(cè)試用例,根據(jù)測(cè)試用例執(zhí)行測(cè)試,并得出測(cè)試結(jié)論。

以登錄功能為例,本系統(tǒng)進(jìn)行登錄功能測(cè)試。當(dāng)用戶需要登錄系統(tǒng)時(shí),本系統(tǒng)通過賬戶密碼等功能點(diǎn)進(jìn)行驗(yàn)證。用戶在輸入時(shí)需要與數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)匹配。如果其中某項(xiàng)輸入錯(cuò)誤,系統(tǒng)將提示輸入錯(cuò)誤。該界面還對(duì)角色權(quán)限進(jìn)行校驗(yàn),當(dāng)用戶選擇管理員角色登錄時(shí),系統(tǒng)會(huì)報(bào)錯(cuò)。下表是登錄功能的測(cè)試用例示例:

輸入數(shù)據(jù) 預(yù)期結(jié)果 實(shí)際結(jié)果 結(jié)果分析
用戶名:guanliyuan 密碼:123456 驗(yàn)證碼:正確輸入 登錄系統(tǒng) 成功登錄系統(tǒng) 結(jié)果一致
用戶名:guanliyuan 密碼:111111 驗(yàn)證碼:正確輸入 密碼錯(cuò)誤 密碼錯(cuò)誤,請(qǐng)重新輸入密碼 結(jié)果一致
用戶名:guanliyuan 密碼:123456 驗(yàn)證碼:錯(cuò)誤輸入 驗(yàn)證碼錯(cuò)誤 驗(yàn)證碼信息錯(cuò)誤 結(jié)果一致
用戶名:空 密碼:123456 驗(yàn)證碼:正確輸入 用戶名必填 請(qǐng)輸入用戶名 結(jié)果一致
用戶名:guanliyuan 密碼:空 驗(yàn)證碼:正確輸入 密碼錯(cuò)誤 密碼錯(cuò)誤,請(qǐng)重新輸入密碼 結(jié)果一致

另外,本系統(tǒng)還進(jìn)行了用戶管理功能的測(cè)試。用戶管理包括添加、編輯、刪除和查找用戶等功能。本系統(tǒng)測(cè)試了以下各項(xiàng)功能的測(cè)試用例:

  1. 添加用戶功能測(cè)試用例:
輸入數(shù)據(jù) 預(yù)期結(jié)果 實(shí)際結(jié)果 結(jié)果分析
用戶名:user1 密碼:123456 角色:普通用戶 添加成功,并在用戶列表中顯示 用戶列表中出現(xiàn)用戶1 結(jié)果一致
用戶名:user2 密碼:111111 角色:普通用戶 添加成功,并在用戶列表中顯示 用戶列表中出現(xiàn)用戶2 結(jié)果一致
用戶名:user1 密碼:123456 角色:普通用戶 添加失敗,提示用戶名已存在 添加失敗,提示用戶名已存在 結(jié)果一致
用戶名:空 密碼:123456 角色:普通用戶 添加失敗,提示用戶名不能為空 添加失敗,提示用戶名不能為空 結(jié)果一致
  1. 編輯用戶功能測(cè)試用例:
輸入數(shù)據(jù) 預(yù)期結(jié)果 實(shí)際結(jié)果 結(jié)果分析
選擇用戶1,修改密碼為654321 編輯成功,密碼修改成功 用戶1密碼已修改為654321 結(jié)果一致
選擇用戶2,修改角色為管理員 編輯成功,角色修改成功 用戶2角色已修改為管理員 結(jié)果一致
選擇用戶1,清空用戶名 編輯失敗,提示用戶名不能為空 編輯失敗,提示用戶名不能為空 結(jié)果一致
  1. 刪除用戶功能測(cè)試用例:
輸入數(shù)據(jù) 預(yù)期結(jié)果 實(shí)際結(jié)果 結(jié)果分析
選擇用戶1進(jìn)行刪除操作 系統(tǒng)詢問是否刪除用戶,確認(rèn)后用戶被刪除 用戶1已成功刪除 結(jié)果一致
選擇用戶2進(jìn)行刪除操作 系統(tǒng)詢問是否刪除用戶,取消刪除操作 用戶2未被刪除 結(jié)果一致

通過系統(tǒng)功能測(cè)試,確保系統(tǒng)的功能完備性,系統(tǒng)能夠按照需求規(guī)格說明書的定義正常運(yùn)行。我們將繼續(xù)進(jìn)行測(cè)試工作,發(fā)現(xiàn)并修復(fù)潛在問題,為用戶提供功能完善的系統(tǒng)體驗(yàn)。

系統(tǒng)測(cè)試結(jié)論

本系統(tǒng)主要使用黑盒測(cè)試,通過模擬用戶使用系統(tǒng)實(shí)現(xiàn)各個(gè)功能編寫測(cè)試用例,并進(jìn)行測(cè)試。以確保系統(tǒng)流程的正確性。系統(tǒng)測(cè)試必不可少,可以使系統(tǒng)更加完善,該系統(tǒng)的可使用性也會(huì)更高。
測(cè)試該系統(tǒng)主要為了驗(yàn)證系統(tǒng)的功能模塊是否滿足我們最初的設(shè)計(jì)理念,驗(yàn)證各個(gè)功能模塊邏輯是否正確,此系統(tǒng)不需要過于復(fù)雜的邏輯處理,以便于使用者操作。測(cè)試的最終目的也是圍繞著用戶使用展開。測(cè)試過程中所有場(chǎng)景都應(yīng)符合用戶需求,不可偏離需求目標(biāo),遇到問題時(shí)要站在用戶的角度進(jìn)行思考。經(jīng)過一系列的測(cè)試過程后得到最終的測(cè)試結(jié)果,從測(cè)試結(jié)果可以看出,實(shí)現(xiàn)的系統(tǒng)在功能和性能方面滿足設(shè)計(jì)要求。

為什么選擇我

基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
博主提供的項(xiàng)目均為博主自己收集和開發(fā)的!所有的源碼都經(jīng)由博主檢驗(yàn)過,能過正常啟動(dòng)并且功能都沒有問題!同學(xué)們拿到后就能使用!
多個(gè)成功系統(tǒng)案例:
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js
基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt,# 微信小程序項(xiàng)目精品案例,# Java精品實(shí)戰(zhàn)案例,微信小程序,spring boot,vue.js

代碼參考

// 忽略權(quán)限驗(yàn)證的注解
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   // 查詢用戶信息
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   // 判斷用戶是否存在或密碼是否正確
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("賬號(hào)或密碼不正確");
   }
   // 生成token
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

// 生成token
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
   // 查詢是否存在已有token
   TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
   // 生成隨機(jī)token字符串
   String token = CommonUtil.getRandomString(32);
   // 設(shè)置token過期時(shí)間為1小時(shí)后
   Calendar cal = Calendar.getInstance();   
   cal.setTime(new Date());   
   cal.add(Calendar.HOUR_OF_DAY, 1);
   if(tokenEntity!=null) {
      // 更新token信息
      tokenEntity.setToken(token);
      tokenEntity.setExpiratedtime(cal.getTime());
      this.updateById(tokenEntity);
   } else {
      // 新建token記錄
      this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
   }
   return token;
}

/**
 * 權(quán)限(Token)驗(yàn)證攔截器
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    // 定義Token在請(qǐng)求Header中的鍵名
    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 支持跨域請(qǐng)求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

        // 跨域時(shí)會(huì)首先發(fā)送一個(gè)OPTIONS請(qǐng)求,這里我們給OPTIONS請(qǐng)求直接返回正常狀態(tài)
        if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
            response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        // 獲取HandlerMethod注解
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        // 從header中獲取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要驗(yàn)證權(quán)限的方法直接放過
         */
        if(annotation!=null) {
            return true;
        }
        
        // 根據(jù)token獲取token實(shí)體
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
            tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
            // 將用戶信息存入session
            request.getSession().setAttribute("userId", tokenEntity.getUserid());
            request.getSession().setAttribute("role", tokenEntity.getRole());
            request.getSession().setAttribute("tableName", tokenEntity.getTablename());
            request.getSession().setAttribute("username", tokenEntity.getUsername());
            return true;
        }
        
        // 驗(yàn)證失敗,返回401錯(cuò)誤和提示信息
        PrintWriter writer = null;
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        try {
            writer = response.getWriter();
            writer.print(JSONObject.toJSONString(R.error(401, "請(qǐng)先登錄")));
        } finally {
            if(writer != null){
                writer.close();
            }
        }
        return false;
    }
}

這段Java代碼主要是一個(gè)登錄功能的實(shí)現(xiàn),涉及到生成Token和權(quán)限驗(yàn)證的攔截器。

  1. @IgnoreAuth 注解:這是一個(gè)自定義的注解,用于標(biāo)識(shí)不需要進(jìn)行權(quán)限驗(yàn)證的方法。

  2. @PostMapping(value = "/login"):這是一個(gè)使用POST請(qǐng)求方式的登錄接口。

  3. login 方法:該方法接收用戶名、密碼和驗(yàn)證碼作為參數(shù),并返回一個(gè)包含生成的Token的響應(yīng)對(duì)象。首先通過用戶名查詢用戶信息,然后判斷用戶是否存在并驗(yàn)證密碼是否正確。如果驗(yàn)證失敗,則返回錯(cuò)誤提示;如果驗(yàn)證成功,則調(diào)用 generateToken 方法生成Token,并將其添加到響應(yīng)對(duì)象中返回。

  4. generateToken 方法:該方法用于生成Token。首先查詢是否存在已有的Token實(shí)體,然后生成一個(gè)隨機(jī)的Token字符串。接下來,設(shè)置Token的過期時(shí)間為當(dāng)前時(shí)間加上1小時(shí),并根據(jù)情況進(jìn)行更新或插入Token記錄。最后返回生成的Token字符串。

  5. AuthorizationInterceptor 類:這是一個(gè)權(quán)限驗(yàn)證攔截器實(shí)現(xiàn)類。它實(shí)現(xiàn)了 HandlerInterceptor 接口,用于在請(qǐng)求處理之前進(jìn)行權(quán)限驗(yàn)證。在 preHandle 方法中,首先設(shè)置支持跨域請(qǐng)求的相關(guān)頭信息,并處理跨域時(shí)的 OPTIONS 請(qǐng)求。然后,通過反射獲取請(qǐng)求處理方法上的 @IgnoreAuth 注解,如果存在該注解,則直接放過。接著,從請(qǐng)求頭中獲取 Token,并根據(jù) Token 獲取對(duì)應(yīng)的 Token 實(shí)體。如果 Token 實(shí)體存在,則將用戶信息存入 session,并放行請(qǐng)求。如果驗(yàn)證失敗,則返回401錯(cuò)誤和相應(yīng)的提示信息。

總結(jié),這段代碼實(shí)現(xiàn)了一個(gè)基本的登錄功能,并加入了對(duì)權(quán)限的驗(yàn)證攔截,確保只有擁有有效 Token 的用戶才能訪問受限資源。

數(shù)據(jù)庫(kù)參考

根據(jù)給出的數(shù)據(jù)庫(kù)SQL語句,設(shè)計(jì)一個(gè)商品表的示例:

-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(100) NOT NULL COMMENT '商品名稱',
  `price` decimal(10, 2) NOT NULL COMMENT '商品價(jià)格',
  `description` varchar(200) DEFAULT NULL COMMENT '商品描述',
  `stock` int(11) NOT NULL COMMENT '商品庫(kù)存',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品表';

該商品表包括以下字段:

  • id:商品的主鍵,自增長(zhǎng)。
  • name:商品的名稱,不能為空。
  • price:商品的價(jià)格,采用10位整數(shù)和2位小數(shù)的形式存儲(chǔ)。
  • description:商品的描述,最多200個(gè)字符。
  • stock:商品的庫(kù)存數(shù)量。
  • create_time:商品的創(chuàng)建時(shí)間,記錄商品被添加的時(shí)間。
  • update_time:商品的更新時(shí)間,記錄商品信息最近一次被修改的時(shí)間。

– 向商品表插入數(shù)據(jù)示例

INSERT INTO `product` (`name`, `price`, `description`, `stock`)
VALUES ('iPhone 13', 999.99, 'A powerful and advanced smartphone', 100);

INSERT INTO `product` (`name`, `price`, `description`, `stock`)
VALUES ('Samsung Galaxy S21', 899.99, 'A flagship Android smartphone', 150);

INSERT INTO `product` (`name`, `price`, `description`, `stock`)
VALUES ('Sony PlayStation 5', 499.99, 'Next-gen gaming console', 50);

源碼獲取

私信聯(lián)系我即可~
大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 、查看????獲取聯(lián)系方式????
精彩專欄推薦訂閱:在下方專欄????

Java精品實(shí)戰(zhàn)案例《500套》

微信小程序項(xiàng)目精品案例《500套》
Java核心技術(shù)精選
Java框架精選文章來源地址http://www.zghlxwxcb.cn/news/detail-838771.html

到了這里,關(guān)于基于微信小程序的在線選課系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在線選課的微信小程序(微信前端+網(wǎng)站后端)

    在線選課的微信小程序(微信前端+網(wǎng)站后端)

    目錄 一、前言 二、微信小程序端(老師、學(xué)生) 1.學(xué)生用戶前端小程序界面 ?2.老師前端小程序界面 三、后端(管理員、老師、學(xué)生) 3.老師后端 4.管理員后端 四、代碼獲取與調(diào)試 這是一個(gè)在線選課的微信小程序,使用了 idea + Navicat + maven + vue + 微信開發(fā)者工具 。 1.學(xué)生用

    2024年02月11日
    瀏覽(29)
  • 基于微信小程序的畢業(yè)設(shè)計(jì)——學(xué)生選課系統(tǒng)(附源碼+論文)

    基于微信小程序的畢業(yè)設(shè)計(jì)——學(xué)生選課系統(tǒng)(附源碼+論文)

    ? :SpringBoot;寵物管理;寵物醫(yī)院;寵物店管理;畢業(yè);我們專注于軟件開發(fā)工程領(lǐng)域,熟練掌握多種開發(fā)技術(shù),包括基于SpringBoot、Vue.js、SSM框架的應(yīng)用開發(fā),以及針對(duì)Android APP和微信小程序的開發(fā)。?(具體流程參見文章最后段落) 摘要 隨著移動(dòng)互聯(lián)網(wǎng)的普及,微

    2024年02月01日
    瀏覽(22)
  • 基于Java+Vue+uniapp微信小程序選課系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序選課系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和學(xué)生畢業(yè)項(xiàng)目實(shí)戰(zhàn),高校老師/講師/同行交流合作 ? 主要內(nèi)容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月02日
    瀏覽(39)
  • Java SpringBoot基于微信小程序的高速公路服務(wù)區(qū)充電樁在線預(yù)定系統(tǒng),附源碼

    Java SpringBoot基于微信小程序的高速公路服務(wù)區(qū)充電樁在線預(yù)定系統(tǒng),附源碼

    博主介紹:?IT徐師兄、7年大廠程序員經(jīng)歷。全網(wǎng)粉絲15W+、csdn博客專家、掘金/華為云//InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn)? ?? 文末獲取源碼聯(lián)系 ?? ???? 精彩專欄推薦訂閱???? 不然下次找不到喲 2022-2024年最全的計(jì)算機(jī)軟件畢業(yè)設(shè)計(jì)選題大全:

    2024年04月17日
    瀏覽(55)
  • 基于Springboot和Redis實(shí)現(xiàn)的在線選課系統(tǒng)

    基于Springboot和Redis實(shí)現(xiàn)的在線選課系統(tǒng)

    畢業(yè)設(shè)計(jì)真的就是demo嗎?作為工作前的最后一個(gè)校園項(xiàng)目,畢業(yè)設(shè)計(jì)應(yīng)當(dāng)盡可能的貼近企業(yè)實(shí)戰(zhàn),業(yè)務(wù)不必很復(fù)雜,但要做到麻雀雖小五臟俱全。本期學(xué)長(zhǎng)跟大家一起分享如何開發(fā)一個(gè)在線選課系統(tǒng),需求也比較簡(jiǎn)單。系統(tǒng)初始化后會(huì)默認(rèn)創(chuàng)建一個(gè)admin管理員賬號(hào),以及三個(gè)

    2024年03月17日
    瀏覽(21)
  • 基于微信小程序的學(xué)生選課成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(源碼+論文)_v_149

    基于微信小程序的學(xué)生選課成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(源碼+論文)_v_149

    摘 ? 要 隨著移動(dòng)互聯(lián)網(wǎng)、智能手機(jī)的普及,微信被廣大用戶認(rèn)可并廣泛被使用,其中微信小程序主要通過微信信息會(huì)話以及網(wǎng)頁的形式為用戶提供服務(wù),方便人們對(duì)信息的了解,操作簡(jiǎn)單實(shí)用。本文主要介紹了學(xué)生成績(jī)管理系統(tǒng)微信小程序的開發(fā)過程,對(duì)開發(fā)環(huán)境、系統(tǒng)設(shè)

    2024年02月02日
    瀏覽(23)
  • springboot基于spring boot的在線答題微信小程序

    springboot基于spring boot的在線答題微信小程序

    :在線答題微信小程序;JAVA語言;MySQL數(shù)據(jù)庫(kù); Abstract WeChat widget for online question answering is an important part of the exam. Online question answering is the main channel for students to obtain task information. In order to facilitate students to view task information and exams on the website, a simple and portable online W

    2024年02月20日
    瀏覽(24)
  • SpringBoot+微信小程序在線訂餐小程序系統(tǒng) 附帶詳細(xì)運(yùn)行指導(dǎo)視頻

    SpringBoot+微信小程序在線訂餐小程序系統(tǒng) 附帶詳細(xì)運(yùn)行指導(dǎo)視頻

    項(xiàng)目演示地址: 視頻地址 項(xiàng)目描述:這是一個(gè) 基于SpringBoot+微信小程序框架 開發(fā)的在線訂餐小程序系統(tǒng)。首先,這是一個(gè) 前后端分離 的項(xiàng)目,代碼簡(jiǎn)潔規(guī)范,注釋說明詳細(xì),易于理解和學(xué)習(xí)。其次,這項(xiàng)目功能豐富,具有一個(gè)在線訂餐小程序系統(tǒng)該有的所有功能。 項(xiàng)目功

    2024年02月12日
    瀏覽(20)
  • 微信小程序|SSM微信小程序的學(xué)生選課系統(tǒng)

    微信小程序|SSM微信小程序的學(xué)生選課系統(tǒng)

    作者簡(jiǎn)介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家 、CSDN內(nèi)容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構(gòu)師設(shè)計(jì)經(jīng)驗(yàn)、騰訊課堂常駐講師 主要內(nèi)容:Java項(xiàng)目、Python項(xiàng)目、前端項(xiàng)目、人工智能與大數(shù)據(jù)、簡(jiǎn)歷模板、學(xué)習(xí)資料、面試題庫(kù)、技術(shù)互助 收藏點(diǎn)贊不

    2024年01月25日
    瀏覽(32)
  • 畢業(yè)設(shè)計(jì)springboot基于spring boot的在線答題微信小程序

    畢業(yè)設(shè)計(jì)springboot基于spring boot的在線答題微信小程序

    :在線答題微信小程序;JAVA語言;MySQL數(shù)據(jù)庫(kù); Abstract WeChat widget for online question answering is an important part of the exam. Online question answering is the main channel for students to obtain task information. In order to facilitate students to view task information and exams on the website, a simple and portable online W

    2024年04月26日
    瀏覽(100)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包