1.修改权限认证逻辑,在白名单中的url也尝试获取用户信息

2. 编写dockerfile文件
master
gitee 3 days ago
parent 0f946a3592
commit 2c22b4304a

@ -0,0 +1,15 @@
# 运行
## 构建后端docker镜像
进入Dockerfile所在目录执行命令
```shell
docker build -t live-digital-avatar-manage:1.0.0 .
```
## 启动后端服务
```shell
docker run -itd --name live-digital-avatar-manage -v /data/live-digital-avatar/server:/data/live-digital-avatar/web/ -p 9909:9909 live-digital-avatar-manage:1.0.0
```

@ -0,0 +1,14 @@
# 设置基础镜像
FROM openjdk:17-jdk-alpine
# 设置时区(安装 tzdata 并配置)
RUN apk add --no-cache tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 暴漏服务端口
EXPOSE 8080
# 设置启动命令
ENTRYPOINT ["java","-Xms256m","-Xmx1g", "-Xss2m","-Dfile.encoding=utf-8","-Duser.timezone=Asia/Shanghai","-jar","/data/live-digital-avatar/web/live-digital-avatar-manage-0.0.1-SNAPSHOT.jar"]

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.supervision</groupId>
<artifactId>live-digital-avatar-manage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>live-digital-avatar-manage</name>
<description>live-digital-avatar-manage</description>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-ai.version>1.0.0-M7</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.21</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.6</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83_noneautotype</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.3</version>
</dependency>
<dependency>
<groupId>org.commonmark</groupId>
<artifactId>commonmark</artifactId>
<version>0.21.0</version>
</dependency>
<dependency>
<groupId>org.commonmark</groupId>
<artifactId>commonmark-ext-gfm-tables</artifactId>
<version>0.21.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.12.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

@ -36,14 +36,15 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
FilterChain filterChain) throws IOException, ServletException { FilterChain filterChain) throws IOException, ServletException {
// 1. 检查是否在白名单中 // 1. 检查是否在白名单中
if (isPermitAllRequest(request)) { boolean permitAllRequest = isPermitAllRequest(request);
filterChain.doFilter(request, response);
return;
}
String authHeader = request.getHeader("Authorization"); String authHeader = request.getHeader("Authorization");
//2根本没有 Authorization 头 //2根本没有 Authorization 头
if (authHeader == null || !authHeader.startsWith("Bearer ")) { if (authHeader == null || !authHeader.startsWith("Bearer ")) {
if (permitAllRequest) {
filterChain.doFilter(request, response);
return;
}
writeTokenErrorResponse(response, "用户未登录,请登录"); writeTokenErrorResponse(response, "用户未登录,请登录");
return; // 直接返回,不放行 return; // 直接返回,不放行
} }
@ -54,6 +55,10 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
try { try {
username = jwtUtils.getUsernameFromToken(token); username = jwtUtils.getUsernameFromToken(token);
} catch (Exception e) { } catch (Exception e) {
if (permitAllRequest) {
filterChain.doFilter(request, response);
return;
}
writeTokenErrorResponse(response, "Token 无效或已过期,请重新登录"); writeTokenErrorResponse(response, "Token 无效或已过期,请重新登录");
return; return;
} }
@ -79,18 +84,34 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
} else { } else {
//Token 过期 或 登录态不一致 //Token 过期 或 登录态不一致
if (permitAllRequest) {
filterChain.doFilter(request, response);
return;
}
writeTokenErrorResponse(response, "登录已过期,请重新登录"); writeTokenErrorResponse(response, "登录已过期,请重新登录");
return; return;
} }
} catch (UsernameNotFoundException e) { } catch (UsernameNotFoundException e) {
if (permitAllRequest) {
filterChain.doFilter(request, response);
return;
}
writeTokenErrorResponse(response, "用户不存在"); writeTokenErrorResponse(response, "用户不存在");
return; return;
} catch (Exception e) { } catch (Exception e) {
if (permitAllRequest) {
filterChain.doFilter(request, response);
return;
}
writeTokenErrorResponse(response, "用户认证异常:" + e.getMessage()); writeTokenErrorResponse(response, "用户认证异常:" + e.getMessage());
return; return;
} }
} }
if (permitAllRequest) {
filterChain.doFilter(request, response);
return;
}
writeTokenErrorResponse(response, "认证流程异常,请重新登录"); writeTokenErrorResponse(response, "认证流程异常,请重新登录");
} }
private void writeTokenErrorResponse(HttpServletResponse response, String message) throws IOException { private void writeTokenErrorResponse(HttpServletResponse response, String message) throws IOException {

Loading…
Cancel
Save