Browse Source

feat(部署): 前端静态资源免认证访问与打包配置

- pom.xml 将 static/** 单独作为资源目录,关闭 filtering 并指定 targetPath 避免平铺到 classes 根目录
- JwtAuthFilter 跳过首页与静态资源路径,避免管理后台密钥误校验产生 WARN 日志
- SecurityConfig 放行 /、/index.html、/assets/**、/sdk/** 等静态资源与首页
master
wanghanlin 6 days ago
parent
commit
940caedea8
  1. 9
      pom.xml
  2. 12
      src/main/java/com/wok/supportbot/security/JwtAuthFilter.java
  3. 3
      src/main/java/com/wok/supportbot/security/SecurityConfig.java

9
pom.xml

@ -203,6 +203,15 @@
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>static/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/static</directory>
<!-- 必须指定 targetPath,否则文件会被平铺到 target/classes/ 根目录,而不是 target/classes/static/ -->
<targetPath>static</targetPath>
<filtering>false</filtering>
</resource>
</resources>
<plugins>

12
src/main/java/com/wok/supportbot/security/JwtAuthFilter.java

@ -63,13 +63,19 @@ public class JwtAuthFilter extends OncePerRequestFilter {
}
/**
* 跳过 SDK 路径 这些路径由 SdkAuthFilter 使用独立的 jwt.sdk-secret 验签
* 不应由本 Filter 用管理后台密钥重复验证避免产生误报 WARN 日志
* 跳过 SDK 路径和静态资源路径 这些路径要么 SdkAuthFilter 使用独立的 jwt.sdk-secret 验签
* 要么是不需要认证的首页/前端资源不应由本 Filter 用管理后台密钥重复验证避免产生误报 WARN 日志
*/
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
String path = request.getServletPath();
return path.startsWith("/ai/");
return path.startsWith("/ai/")
|| path.isEmpty() || path.equals("/")
|| path.equals("/index.html")
|| path.startsWith("/assets/")
|| path.startsWith("/sdk/")
|| path.equals("/favicon.ico")
|| path.equals("/favicon.svg");
}
/**

3
src/main/java/com/wok/supportbot/security/SecurityConfig.java

@ -44,6 +44,9 @@ public class SecurityConfig {
.sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
// ========== 公开接口无需认证 ==========
// 静态资源与首页放在最前面优先匹配
.requestMatchers("/", "/index.html", "/favicon.ico", "/favicon.svg").permitAll()
.requestMatchers("/assets/**", "/sdk/**").permitAll()
// SDK 对话接口
// SdkAuthFilter 作为 Servlet Filter 已在 SecurityFilterChain 之前执行
// 校验通过时已放行校验失败时已返回 401不会到达此处

Loading…
Cancel
Save