# 2026-05-25 开发日志

## 1. 为项目补充 Session 登录链路

- 动作：在保留原有 JWT 登录的基础上，新增了一套 Session 登录链路，包括 Session 登录控制器、Session 登录成功/失败处理器，以及独立的 Session 安全配置。
- 原因：项目原先仅支持 JWT 登录，浏览器页面场景下希望再增加一套基于 Session 的登录方式，以便兼容传统页面会话场景，同时保留原有接口调用的 JWT 认证能力。
- 结果：项目已具备 JWT 与 Session 两套登录入口，后续可按路径区分不同认证方式。

## 2. 处理 Session 登录页与静态资源访问问题

- 动作：为 `session_login.html`、`session_index.html` 相关页面补充控制器路由，并在 `WebConfig` 中补充静态资源映射，确保 `/js/**`、`/css/**` 等资源可正常访问。
- 原因：由于项目启用了 `@EnableWebMvc`，Spring Boot 默认静态资源映射会被接管，导致部分前端资源 404，同时登录页需要可直接访问。
- 结果：登录页、首页及静态资源访问问题已得到修复，页面链路可正常打开。

## 3. 让 Session 登录复用项目原有加密与验证码流程

- 动作：Session 登录接口改为接收前端加密后的密码，并通过 `apiService.smDecrypt(...)` 完成解密；同时按 `yzmURL` 从缓存中取出验证码进行比对。
- 原因：项目原有登录流程并非明文密码提交，而是前端加密后再传输，同时还需要验证码校验，Session 登录需要兼容这一套既有机制。
- 结果：Session 登录与原项目密码加密、验证码校验流程保持一致，减少了登录体系切换带来的割裂感。

## 4. 让 Session 登录成功后真正进入 Spring Security 上下文

- 动作：在 Session 登录成功后，手动创建 `Authentication`，设置到 `SecurityContextHolder`，并将 `SPRING_SECURITY_CONTEXT` 写入 `HttpSession`。
- 原因：仅将用户对象放入 Session 还不足以让 Spring Security 认可已登录状态，页面访问仍可能被权限体系拦截。
- 结果：Session 登录完成后，Spring Security 能够识别登录态，为后续页面访问提供基础。

## 5. 让 JWT 过滤器放行 Session 路径

- 动作：在 `JwtTokenFilter` 中增加对 `/session/**` 路径的放行逻辑，避免 Session 登录请求继续被 JWT 认证链拦截。
- 原因：项目中 JWT 过滤器为全局拦截器，若不额外放行 Session 路径，Session 登录成功后仍可能被 JWT 逻辑误判为未登录。
- 结果：Session 路径与 JWT 路径实现了并存，互不干扰。

## 6. 优化前端登录与 URL 组织方式

- 动作：调整 `config.js` 中的接口前缀组织方式，新增可重置的 API 前缀配置，并将相关接口 URL 抽离成独立初始化方法，支持在切换 `loginType` 后手动重新生成。
- 原因：项目同时存在 JWT 与 Session 两套登录方式，前端需要根据登录类型动态切换接口前缀，避免路径散落在各处难以维护。
- 结果：前端接口组织更清晰，可通过切换 `loginType` 后调用初始化方法来完成接口重置。

## 7. 调整 Session 登录参数格式为 raw JSON

- 动作：将 Session 登录请求调整为 `POST raw JSON` 方式，并在后端登录入口中补充 `loginType=session` 的固定参数注入。
- 原因：前端登录数据结构与项目其他接口保持一致更利于维护，同时 raw JSON 方式更适合当前的登录参数组织方式。
- 结果：Session 登录接口已可以接收 JSON 形式的请求体，后续登录业务可继续按统一 JSON 协议扩展。

## 8. 配置打包时忽略 `static` 与 `templates` 目录

- 动作：在 `pom.xml` 中增加资源排除配置，打包时忽略 `src/main/resources/static` 与 `src/main/resources/templates` 目录。
- 原因：部分部署场景下前端静态资源和模板不需要随后端 Jar 一起打包，希望通过外部部署或独立资源方式提供。
- 结果：后端打包体积更小，静态资源与模板文件可按独立部署方式管理，便于前后端分离或外部挂载使用。
