SpringBoot從0到0.7——第四天
阿新 • • 發佈:2022-04-10
SpringBoot從0到0.7——第四天
今天進行實戰開發一個小專案,SpringBoot和Thymeleaf整合的小專案
因為懶得寫寫前端,直接找的別人的專案在它的的基礎上進行配置,進行修改。gitee專案下載
專案說明:
## 專案說明 本專案使用SpringBoot開發,jdbc5.1.48 ### 1.資料庫資訊 建立兩個表,管理員表user和員工表employee ### 2.專案流程 1.springboot整合thymeleaf 1).引入依賴 <!--使用thymelaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 2).配置thymeleaf模板配置 spring: thymeleaf: cache: false # 關閉快取 prefix: classpath:/templates/ #指定模板位置 suffix: .html #指定字尾 3).開發controller跳轉到thymeleaf模板 @Controller @RequestMapping("hello") public class HelloController { @RequestMapping("hello") public String hello(){ System.out.println("hello ok"); return "index"; // templates/index.html } } ================================================================= 2.thymeleaf 語法使用 1).html使用thymeleaf語法 必須匯入thymeleaf的頭才能使用相關語法 namespace: 名稱空間 <html lang="en" xmlns:th="http://www.thymeleaf.org"> 2).在html中通過thymeleaf語法獲取資料 ================================================================ ###3.案例開發流程 需求分析: 分析這個專案含有哪些功能模組 使用者模組: 註冊 登入 驗證碼 安全退出 真是使用者 員工模組: 新增員工+上傳頭像 展示員工列表+展示員工頭像 刪除員工資訊+刪除員工頭像 更新員工資訊+更新員工頭像 庫表設計(概要設計): 1.分析系統有哪些表 2.分析表與表關係 3.確定表中欄位(顯性欄位 隱性欄位(業務欄位)) 2張表 1.使用者表 user id username realname password gender 2.員工表 employee id name salary birthday photo 建立一個庫: ems-thymeleaf 詳細設計: 省略 編碼(環境搭建+業務程式碼開發) 1.建立一個springboot專案 專案名字: ems-thymeleaf 2.修改配置檔案為 application.yml pom.xml 2.5.0 3.修改埠 專案名: ems-thymeleaf 4.springboot整合thymeleaf使用 a.引入依賴 b.配置檔案中指定thymeleaf相關配置 c.編寫控制器測試 5.springboot整合mybatis mysql、druid、mybatis-springboot-stater b.配置檔案中 6.匯入專案頁面 static 存放靜態資源 templates 目錄 存放模板檔案 測試 上線部署 維護 發版
首先匯入專案
等待載入依賴完成
建立資料庫匯入資料---看一下它的application.yml
看一下yapplication.yml裡面還有什麼需要配置的---照片儲存地址
啟動專案
登入,看一下後臺
分析一下這個小專案:
首先看一下application.yml
#關閉thymeleaf模板快取 spring: thymeleaf: cache: false prefix: classpath:/templates/ #指定模板位置 suffix: .html #指定字尾名 datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ssmbuild?characterEncoding=UTF-8 username: root password: 123456 web: resources: static-locations: classpath:/static/,file:${photo.file.dir} #暴露哪些資源可以通過專案名訪問 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.xuda.springboot.pojo #Mybatis配置 #日誌配置 logging: level: root: info com.xuda: debug #指定檔案上傳的位置 photo: file: dir: C:\Users\15969\Desktop\站點\Spring boot\SpringBootStudy\photo
config-LoginHandlerInterceptor攔截器,防止未授權訪問
package com.xuda.springboot.config; import com.xuda.springboot.controller.UserController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Configuration public class LoginHandlerInterceptor implements HandlerInterceptor { private static final Logger log = LoggerFactory.getLogger(LoginHandlerInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("session+=》{}",request.getSession().getAttribute("user")); //登入成功後,應該有使用者得session Object loginuser = request.getSession().getAttribute("user"); if (loginuser == null) { request.setAttribute("loginmsg", "沒有許可權請先登入"); request.getRequestDispatcher("/login.html").forward(request, response); return false; } else { return true; } } }
這個專案很適合新手來分析學習,搭建簡單,程式碼易懂
在此基礎上新增修改,給它的日誌儲存下來,這樣有利於分析日誌,如何將日誌儲存到本地呢
先在resources目錄下建立logback-spring.xml
<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 引入預設得配置檔案 --> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <!-- 模組名標識日誌名稱 --> <springProperty scope="context" name="springAppName" source="spring.application.name"/> <!-- info日誌單檔案大小限制 --> <springProperty scope="context" name="logback.fileInfoLog.maxFileSize" source="logback.fileInfoLog.maxFileSize" defaultValue="200MB" /> <!-- info日誌最大保留時長單位天 --> <springProperty scope="context" name="logback.fileInfoLog.maxHistory" source="logback.fileInfoLog.maxHistory" defaultValue="15" /> <!-- info日誌檔案總大小,超過該大小,舊得即將刪除 --> <springProperty scope="context" name="logback.fileInfoLog.totalSizeCap" source="logback.fileInfoLog.totalSizeCap" defaultValue="100GB" /> <!-- error日誌單檔案大小限制 --> <springProperty scope="context" name="logback.fileErrorLog.maxFileSize" source="logback.fileErrorLog.maxFileSize" defaultValue="200MB" /> <!-- error日誌最大保留時長單位天 --> <springProperty scope="context" name="logback.fileErrorLog.maxHistory" source="logback.fileErrorLog.maxHistory" defaultValue="15" /> <!-- error日誌檔案總大小,超過該大小,舊得即將刪除 --> <springProperty scope="context" name="logback.fileErrorLog.totalSizeCap" source="logback.fileErrorLog.totalSizeCap" defaultValue="100GB" /> <!-- http日誌單檔案大小限制 --> <springProperty scope="context" name="logback.fileHttpLog.maxFileSize" source="logback.fileHttpLog.maxFileSize" defaultValue="200MB" /> <!-- http日誌最大保留時長單位天 --> <springProperty scope="context" name="logback.fileHttpLog.maxHistory" source="logback.fileHttpLog.maxHistory" defaultValue="15" /> <!-- http日誌檔案總大小,超過該大小,舊得即將刪除 --> <springProperty scope="context" name="logback.fileHttpLog.totalSizeCap" source="logback.fileHttpLog.totalSizeCap" defaultValue="100GB" /> <!-- 日誌目錄 --> <springProperty scope="context" name="logback.rootDir" source="logback.rootDir" defaultValue="logs"/> <!-- 控制檯輸出得日誌格式 --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <!-- 日誌檔案輸出得日誌格式 --> <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"/> <!-- 控制檯輸出 --> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </layout> </appender> <!-- info日誌得設定 --> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <file>${logback.rootDir}/${springAppName}.log</file> <!--滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" > <!--路徑--> <fileNamePattern>${logback.rootDir}/%d{yyyy-MM,aux}/%d{yyyy-MM-dd,aux}/${springAppName}-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <maxFileSize>${logback.fileInfoLog.maxFileSize}</maxFileSize> <maxHistory>${logback.fileInfoLog.maxHistory}</maxHistory> <totalSizeCap>${logback.fileInfoLog.totalSizeCap}</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> </appender> <!-- 錯誤日誌 --> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <file>${logback.rootDir}/${springAppName}-error.log</file> <!--滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" > <!--路徑--> <fileNamePattern>${logback.rootDir}/%d{yyyy-MM,aux}/%d{yyyy-MM-dd,aux}/${springAppName}-error-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <maxFileSize>${logback.fileErrorLog.maxFileSize}</maxFileSize> <maxHistory>${logback.fileErrorLog.maxHistory}</maxHistory> <totalSizeCap>${logback.fileErrorLog.totalSizeCap}</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> </appender> <!-- http日誌 --> <appender name="httpInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %m%n</pattern> </encoder> <file>${logback.rootDir}/${springAppName}-http.log</file> <!--滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--路徑--> <fileNamePattern>${logback.rootDir}/%d{yyyy-MM,aux}/%d{yyyy-MM-dd,aux}/${springAppName}-http-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <maxFileSize>${logback.fileHttpLog.maxFileSize}</maxFileSize> <maxHistory>${logback.fileHttpLog.maxHistory}</maxHistory> <totalSizeCap>${logback.fileHttpLog.totalSizeCap}</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> </appender> <appender name="ASYNC_consoleLog" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="consoleLog"/> </appender> <appender name="ASYNC_fileInfoLog" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="fileInfoLog"/> </appender> <appender name="ASYNC_fileErrorLog" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="fileErrorLog"/> </appender> <appender name="ASYNC_httpInfoLog" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="httpInfoLog"/> </appender> <root level="info"> <appender-ref ref="ASYNC_consoleLog" /> <appender-ref ref="ASYNC_fileInfoLog" /> <appender-ref ref="ASYNC_fileErrorLog" /> </root> <logger name="log_http" additivity="false" level="INFO"> <appender-ref ref="ASYNC_httpInfoLog"/> </logger> </configuration>
在application.yml新增
spring: application: name: log
重新執行專案即可看到,在專案目錄下會出現一個log資料夾,裡面包含著日誌
到此,已經能簡單的看懂java程式碼了,開始看原始碼,去進行java程式碼審計!!!