# news **Repository Path**: xxio12/news ## Basic Information - **Project Name**: news - **Description**: 盘点那些震撼人心的公告网页 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-06 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 公司新闻公告系统 盘点那些震撼人心的公告网页——前后端分离的公司新闻公告系统,访客可分页浏览新闻列表、查看 Markdown 渲染的公告详情,管理员通过邮箱密码登录。 ## 技术栈 - **后端**(`backend/`):Java 21 · Spring Boot 3.5.15 · MyBatis(XML 映射)· MySQL 8 + Flyway · Spring Security(Session + HttpOnly Cookie,非 JWT) - **前端**(`frontend/`):Vue 3 + TypeScript · Vite · vue-router · axios · marked + DOMPurify 详细的后端接口文档、数据库准备、本地启动步骤见 [backend/README.md](backend/README.md)。 ## 项目结构 - `backend/` - 后端服务(基础包 `com.companynews.api`) - `frontend/` - 前端页面(Vue 3 + TS) ## 快速启动 ### 1. 后端 ```bash cd backend # (1) MySQL 建库(建表和种子数据由 Flyway 启动时自动完成) mysql -u root -p -e "CREATE DATABASE company_news DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # (2) 复制本地配置模板,把数据库账号密码直接写进去(不用每次 set 环境变量) copy src\main\resources\application-local.example.yml src\main\resources\application-local.yml # 编辑 application-local.yml,把 NEWS_DB_USERNAME / NEWS_DB_PASSWORD 默认值改成你自己的 # 同时确认 server.port: 8080(已写好) # (3) 启动(local profile) mvnw.cmd spring-boot:run "-Dspring-boot.run.profiles=local" # (4) 验证 curl "http://localhost:8080/news?page=1&pageSize=5" ``` > 如果本机存在 `SERVER__PORT=0`(双下划线,Spring Boot relaxed binding 的环境变量写法)之类的环境变量,会覆盖 `server.port` 让 Spring 随机分配端口。两种解法: > 1. 启动时附加 `-Dspring-boot.run.jvmArguments="-Dserver.port=8080"`(系统属性压过环境变量) > 2. 永久 `set SERVER__PORT=` 清掉这个环境变量 > 首个管理员账号的创建方式见 backend/README.md「首个管理员账号」一节(迁移脚本不内置任何账号密码)。 ### 2. 前端 ```bash cd frontend npm install npm run dev # http://localhost:5173,/api 自动代理并去前缀到 localhost:8080 ``` > Vite 把浏览器的 `/api/*` 代理到后端时**会去掉 `/api` 前缀**——这是为了让前端代码(baseURL=`/api`)保持接口语义清晰,同时与后端真实的 `/news` `/auth` 等路径对齐。 生产构建:`npm run build`(先 `vue-tsc` 类型检查,再 `vite build` 产物输出到 `dist/`)。 ## 测试 ```bash cd backend && mvnw.cmd test # 57 个测试:H2 内存库 + Flyway 真实迁移链 ``` ## API 概览 统一响应信封 `{code, message, data}`,统一分页 `{items, page, pageSize, total}`,**实际路径无 `/api` 前缀**(前端通过 Vite 代理加前缀): | 方法 | 路径 | 认证 | 说明 | | --- | --- | --- | --- | | GET | `/security/csrf-token` | 公开 | 引导下发 XSRF-TOKEN Cookie(SPA 场景) | | POST | `/auth/login` | 公开 + CSRF | 邮箱密码登录,建立 Session | | GET | `/auth/me` | 需登录 | 当前登录用户信息 | | POST | `/auth/logout` | 需登录 + CSRF | 登出并销毁 Session | | GET | `/news?page=&pageSize=` | 公开 | 新闻分页列表 | | GET | `/news/{id}` | 公开 | 新闻详情(Markdown 正文) | ## 开发分支 - `main` - 稳定分支,仅通过 PR 合并 - `dev` - 日常开发分支