首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring Boot 整合 Shiro 系列(一):從零構建 Spring Boot Web MVC 基礎環境

     編輯:Java 綜合教學

Spring Boot 整合 Shiro 系列(一):快速搭建 Web MVC 基礎環境

本系列旨在通過實戰項目演示 Spring Boot + Shiro 的權限控制體系。第一章專注於「約定優於配置」理念下,利用 Spring Boot Starter 极速構建一個可運行的 Web MVC 基礎項目,為後續整合 Shiro、數據庫、前端頁面打下堅實基礎。

一、 技術棧與環境

  • IDE:IntelliJ IDEA 2023+
  • JDK:17 / 11 (LTS)
  • Build Tool:Maven 3.8+ / Gradle 7+
  • 核心版本:Spring Boot 3.2.x (要求 JDK 17+),Spring Framework 6.x,Spring Security 6.x (Shiro 替代參考)
  • 內嵌容器:Tomcat 10 / Jetty / Undertow

二、 Maven 依賴配置 (pom.xml)

核心策略:引入 `spring-boot-starter-web` (含 MVC + Tomcat),`spring-boot-starter-test`,`lombok` 簡化代碼。

<project xmlns="https://maven.apache.org/POM/4.0.0" ...>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version> <!-- 統一版本管理 -->
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>springboot-shiro-chapter01</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>SpringBoot Shiro Chapter01</name>

    <properties>
        <java.version>17</java.version>
        <lombok.version>1.18.30</lombok.version>
    </properties>

    <dependencies>
        <!-- 核心 Web MVC Starter (含 Spring MVC, Tomcat, Jackson) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Lombok: 獲取器/構造器/日誌注解 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- 測試 Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <!-- 熱部署 (開發期可選) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

三、 配置文件 (application.yml)

採用 YAML 格式,配置端口、日誌級別、靜態資源映射等。

server:
  port: 8080
  servlet:
    context-path: /shiro-demo

logging:
  level:
    root: INFO
    com.example: DEBUG
    org.springframework.web: DEBUG

spring:
  mvc:
    static-path-pattern: /static/**
  web:
    resources:
      static-locations: classpath:/static/,classpath:/public/
  # 模板引擎 (Thymeleaf 示例,後續 Shiro 標簽需模板引擎支持)
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    mode: HTML
    encoding: UTF-8
    cache: false # 開發關閉緩存

四、 啟動類與核心配置

1. 主啟動類

@SpringBootApplication
// @MapperScan("com.example.mapper") // 後續整合 MyBatis 時啟用
public class Chapter01Application {
    public static void main(String[] args) {
        SpringApplication.run(Chapter01Application.class, args);
    }
}

2. Web MVC 配置類 (替代傳統 web.xml + spring-mvc.xml)

@Configuration
@EnableWebMvc // 全面接管 MVC 配置 (可選,不加則為自動配置增強模式)
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 靜態資源映射
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/favicon.ico")
                .addResourceLocations("classpath:/static/favicon.ico");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 無 Controller 直接跳轉頁面
        registry.addViewController("/").setViewName("forward:/static/index.html");
        registry.addViewController("/login").setViewName("login");
    }

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // Spring Boot 3.0+ 默認不再支持矩陣變量,如需兼容可配置
        configurer.setPatternParser(null); 
    }
}

五、 控制器實現

@RestController // @Controller + @ResponseBody
@RequestMapping("/api")
@Slf4j // Lombok 日誌
public class Chapter01Controller {

    @Autowired
    private HelloService helloService; // 業務服務注入

    @GetMapping("/hello")
    public Result hello() {
        log.info("訪問 /api/hello");
        return Result.success(helloService.getMessage());
    }

    @GetMapping("/health")
    public Result health() {
        return Result.success("UP - " + LocalDateTime.now());
    }
}

業務服務接口與實現

public interface HelloService {
    String getMessage();
}

@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String getMessage() {
        return "Hello Spring Boot 3 + Shiro Series!";
    }
}

統一響應封裝

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Result {
    private Integer code;
    private String message;
    private T data;

    public static  Result success(T data) {
        return Result.builder().code(200).message("SUCCESS").data(data).build();
    }
    public static  Result error(String msg) {
        return Result.builder().code(500).message(msg).build();
    }
}

六、 運行驗證

  1. IDEA 右側 Maven 面板 → `spring-boot:run`,或直接 Run `Chapter01Application.main()`。
  2. 控制台輸出 Tomcat 啟動端口:Tomcat started on port(s): 8080 (http)。
  3. 瀏覽器/Postman 訪問:
    • https://localhost:8080/shiro-demo/api/hello → 返回 JSON: {"code":200,"message":"SUCCESS","data":"Hello Spring Boot 3 + Shiro Series!"}
    • https://localhost:8080/shiro-demo/api/health → 健康檢查端點。

七、 項目結構規範

src/main/java/com/example
├── Chapter01Application.java          # 啟動類
├── config
│   └── WebMvcConfig.java              # MVC 配置
├── controller
│   └── Chapter01Controller.java       # 控制器
├── service
│   ├── HelloService.java              # 接口
│   └── impl
│       └── HelloServiceImpl.java      # 實現
├── common
│   └── Result.java                    # 統一響應
└── util                               # 工具類

src/main/resources
├── application.yml                    # 配置文件
├── static/                            # 靜態資源 (JS, CSS, 圖片)
│   └── index.html
└── templates/                         # 模板文件 (Thymeleaf)
    └── login.html

八、 總結與下章預告

本章完成了 Spring Boot 3.x Web MVC 基礎環境的「零配置」搭建,關鍵點:

  • Starter 依賴:一站式引入 Web 生態。
  • 自動配置:無需 web.xml、DispatcherServlet 手動註冊。
  • YAML 配置:結構化、層次分明。
  • 分層架構:Controller-Service 分離,統一響應封裝。

下章預告:引入 MyBatis-Plus 整合 MySQL,完成實體類、Mapper、Service 的 CRUD 基礎設施,為 Shiro 權限模型(User/Role/Permission)建表準備數據層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved