最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

創(chuàng)建首個(gè) Spring Boot 登錄項(xiàng)目的全攻略

 更新時(shí)間:2025年06月26日 11:15:58   作者:白侖色  
在Java Web開(kāi)發(fā)中,登錄功能是最基礎(chǔ)也是最重要的模塊之一,本文將手把手帶你使用IntelliJ IDEA和Maven構(gòu)建一個(gè)基于Spring Boot的簡(jiǎn)單登錄系統(tǒng),感興趣的朋友跟隨小編一起看看吧

?? 摘要

在 Java Web 開(kāi)發(fā)中,登錄功能是最基礎(chǔ)也是最重要的模塊之一。本文將手把手帶你使用 IntelliJ IDEA 和 Maven 構(gòu)建一個(gè)基于 Spring Boot 的簡(jiǎn)單登錄系統(tǒng),涵蓋:

  • 使用 IDEA 創(chuàng)建 Spring Boot 項(xiàng)目
  • 配置 Maven 依賴(Spring Web、Spring Security、Thymeleaf)
  • 數(shù)據(jù)庫(kù)連接與用戶驗(yàn)證邏輯
  • 登錄頁(yè)面設(shè)計(jì)與控制器實(shí)現(xiàn)
  • 登出功能和權(quán)限控制
  • 常見(jiàn)問(wèn)題解析與最佳實(shí)踐

適合剛?cè)腴T(mén) Spring Boot 的新手開(kāi)發(fā)者,幫助你快速搭建一個(gè)完整的登錄系統(tǒng)原型。

?? 一、開(kāi)發(fā)環(huán)境準(zhǔn)備

工具版本要求
JDK1.8 或以上
IntelliJ IDEA社區(qū)版 / 旗艦版
Maven3.x 及以上
MySQL5.7 或 8.0
Spring Boot推薦 2.6.x ~ 3.x

?? 二、創(chuàng)建 Spring Boot 項(xiàng)目(使用 IDEA)

步驟 1:打開(kāi) IDEA,選擇“New Project”

步驟 2:選擇 “Spring Initializr”,填寫(xiě)項(xiàng)目信息

  • Group:com.example
  • Artifact:login-demo
  • Language:Java
  • Packaging:Jar
  • Java Version:17(或其他版本)

步驟 3:選擇依賴項(xiàng)

勾選以下依賴:

  • Spring Web
  • Spring Security
  • Thymeleaf(可選,用于前端模板)
  • Spring Data JPA(可選,用于數(shù)據(jù)庫(kù)操作)
  • MySQL Driver(可選,用于連接數(shù)據(jù)庫(kù))

點(diǎn)擊 “Create” 完成創(chuàng)建。

?? 三、項(xiàng)目結(jié)構(gòu)說(shuō)明

src/
├── main/
│   ├── java/
│   │   └── com.example.logindemo/
│   │       ├── controller/LoginController.java
│   │       └── LoginDemoApplication.java
│   ├── resources/
│   │   ├── static/
│   │   │   └── css/, js/, images/
│   │   ├── templates/
│   │   │   └── login.html, home.html
│   │   └── application.yml

?? 四、配置 application.yml 文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/login_db?useSSL=false&serverTimezone=UTC
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver
  thymeleaf:
    cache: false
    suffix: .html
    prefix: classpath:/templates/
    encoding: UTF-8
    content-type: text/html

?? 五、創(chuàng)建數(shù)據(jù)庫(kù)與用戶表

CREATE DATABASE login_db;
USE login_db;
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL
);
INSERT INTO users (username, password) VALUES ('admin', '$2a$10$X60FfSIxIgOcZtIXTzKqCeVWwGvQkHlR8eYzE2LmZsS');

注意:密碼使用 BCrypt 加密,如上例中的 $2a$10$..."123456" 加密后的結(jié)果。

?? 六、配置 Spring Security 安全框架

創(chuàng)建配置類 SecurityConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .requestMatchers("/", "/login").permitAll()
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/home")
                .failureUrl("/login?error=true")
                .permitAll()
            .and()
            .logout()
                .logoutSuccessUrl("/")
                .permitAll();
        return http.build();
    }
}

??? 七、創(chuàng)建登錄頁(yè)面 login.html(放在 templates 目錄下)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>登錄</title>
</head>
<body>
<h2>登錄頁(yè)面</h2>
<form th:action="@{/login}" method="post">
    <div th:if="${param.error}">
        <p style="color:red;">用戶名或密碼錯(cuò)誤</p>
    </div>
    <label>用戶名:</label>
    <input type="text" name="username"/>
    <label>密碼:</label>
    <input type="password" name="password"/>
    <button type="submit">登錄</button>
</form>
</body>
</html>

?? 八、創(chuàng)建首頁(yè) home.html(登錄成功后跳轉(zhuǎn))

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>首頁(yè)</title>
</head>
<body>
<h2>歡迎來(lái)到主頁(yè)!</h2>
<a href="/logout" rel="external nofollow" >退出登錄</a>
</body>
</html>

?? 九、編寫(xiě)控制器 LoginController.java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
    @GetMapping("/")
    public String index() {
        return "login";
    }
    @GetMapping("/login")
    public String login() {
        return "login";
    }
    @GetMapping("/home")
    public String home() {
        return "home";
    }
}

? 十、測(cè)試運(yùn)行項(xiàng)目

  1. 啟動(dòng) Spring Boot 應(yīng)用
  2. 瀏覽器訪問(wèn):http://localhost:8080
  3. 輸入用戶名 admin 和密碼 123456
  4. 成功登錄后跳轉(zhuǎn)至 /home
  5. 點(diǎn)擊退出,回到登錄頁(yè)

?? 十一、常見(jiàn)問(wèn)題與解決方案

Q1: 登錄失敗,提示 Bad credentials?

  • 檢查數(shù)據(jù)庫(kù)密碼是否是 BCrypt 加密格式
  • 檢查用戶名是否正確匹配數(shù)據(jù)庫(kù)字段

Q2: 頁(yè)面無(wú)法訪問(wèn)?

  • 檢查 Controller 路徑映射是否正確
  • 查看啟動(dòng)日志是否有報(bào)錯(cuò)

Q3: 登錄成功后無(wú)法跳轉(zhuǎn)?

  • 檢查 defaultSuccessUrl() 是否設(shè)置正確
  • 確保沒(méi)有攔截 /home 路徑

Q4: 如何自定義用戶加載邏輯?

  • 實(shí)現(xiàn) UserDetailsService 接口,重寫(xiě) loadUserByUsername() 方法

?? 十二、參考資料

到此這篇關(guān)于創(chuàng)建首個(gè) Spring Boot 登錄項(xiàng)目的文章就介紹到這了,更多相關(guān)Spring Boot 登錄項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?實(shí)現(xiàn)訂單未支付超時(shí)自動(dòng)取消功能(京東商城為例)

    Java?實(shí)現(xiàn)訂單未支付超時(shí)自動(dòng)取消功能(京東商城為例)

    本文以京東網(wǎng)上商城為例,給大家介紹商品在下單后沒(méi)有支付的情況下,超時(shí)自動(dòng)取消功能,超過(guò)24小時(shí),就會(huì)自動(dòng)取消訂單,下面使用 Java 定時(shí)器實(shí)現(xiàn)超時(shí)取消訂單功能,感興趣的朋友一起看看吧
    2022-01-01
  • 如何解決Druid線程池Cause:java.sql.SQLRecoverableException:IO錯(cuò)誤:Socket read timed out的問(wèn)題

    如何解決Druid線程池Cause:java.sql.SQLRecoverableException:IO錯(cuò)誤:Sock

    這篇文章主要介紹了解決Druid線程池Cause:java.sql.SQLRecoverableException:IO錯(cuò)誤:Socket read timed out的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • java文件如何統(tǒng)計(jì)字母出現(xiàn)的次數(shù)和百分比

    java文件如何統(tǒng)計(jì)字母出現(xiàn)的次數(shù)和百分比

    這篇文章主要介紹了java文件如何統(tǒng)計(jì)字母出現(xiàn)的次數(shù)和百分比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java this、final等關(guān)鍵字總結(jié)

    Java this、final等關(guān)鍵字總結(jié)

    這篇文章主要對(duì)java中this、final等關(guān)鍵字進(jìn)行了總結(jié),需要的朋友可以參考下
    2017-04-04
  • Java中Struts2的值棧ValueStack詳解

    Java中Struts2的值棧ValueStack詳解

    這篇文章主要介紹了Java中Struts2的值棧ValueStack詳解,值棧(ValueStack)就是 OGNL 表達(dá)式存取數(shù)據(jù)的地方,在一個(gè)值棧中,封裝了一次請(qǐng)求所需要的所有數(shù)據(jù),需要的朋友可以參考下
    2023-08-08
  • Java線上CPU飆高問(wèn)題排查及解決全指南

    Java線上CPU飆高問(wèn)題排查及解決全指南

    在Java應(yīng)用的線上運(yùn)行環(huán)境中,CPU飆高是一個(gè)常見(jiàn)且棘手的性能問(wèn)題,當(dāng)系統(tǒng)出現(xiàn)CPU飆高時(shí),通常會(huì)導(dǎo)致應(yīng)用響應(yīng)緩慢,甚至服務(wù)不可用,因此,掌握一套科學(xué)有效的CPU飆高問(wèn)題排查方法很重要,所以本文給大家介紹了Java線上CPU飆高問(wèn)題排查及解決全指南,需要的朋友可以參考下
    2025-07-07
  • Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用講解

    Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用講解

    這篇文章主要介紹了Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • java之基本數(shù)據(jù)類型所對(duì)應(yīng)的包裝類使用

    java之基本數(shù)據(jù)類型所對(duì)應(yīng)的包裝類使用

    本文介紹了Java中的8種基本數(shù)據(jù)類型及其對(duì)應(yīng)的包裝類,包括包裝類的作用、自動(dòng)裝箱和拆箱機(jī)制、以及提供的一些實(shí)用方法
    2025-12-12
  • maven項(xiàng)目錯(cuò)誤:找不到或無(wú)法加載主類?XXX問(wèn)題

    maven項(xiàng)目錯(cuò)誤:找不到或無(wú)法加載主類?XXX問(wèn)題

    這篇文章主要介紹了maven項(xiàng)目錯(cuò)誤:找不到或無(wú)法加載主類?XXX問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Java 中的 this 和 super 區(qū)別

    Java 中的 this 和 super 區(qū)別

    這篇文章主要介紹了Javathis與super本質(zhì)區(qū)別,this與super是類實(shí)例化時(shí)通往Object類通道的打通者;this和super在程序中由于其經(jīng)常被隱式的使用而被我們忽略,但是理解其作用和使用規(guī)范肯定是必須的。接下來(lái)將詳述this與super的作用和區(qū)別,需要的朋友可以參考一下
    2021-11-11

最新評(píng)論

南和县| 彭泽县| 禄丰县| 敦化市| 申扎县| 景德镇市| 江阴市| 南岸区| 班玛县| 藁城市| 杭州市| 上林县| 贺州市| 阿尔山市| 东阿县| 宜黄县| 汨罗市| 文山县| 洛扎县| 清远市| 驻马店市| 奉新县| 南安市| 浦东新区| 福建省| 厦门市| 台江县| 辰溪县| 长泰县| 夏河县| 丰顺县| 南通市| 广汉市| 固镇县| 奇台县| 沅陵县| 紫阳县| 福鼎市| 嘉禾县| 云梦县| 出国|