fix(config): 更新API地址和配置设置
- 修改前端环境配置文件中的API基础URL地址 - 切换路由模式从history到hash模式以解决部署问题 - 注释掉axios的withCredentials配置避免跨域问题 - 修复后端JWT认证过滤器中的代码注释和逻辑结构 - 更新Docker容器时区设置为上海时区 - 修复笔记编辑器中保存数据时字段缺失的问题 - 添加Vite构建输出目录和资源目录配置 - 恢复后端开发环境数据库路径配置
This commit is contained in:
@@ -33,38 +33,69 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
||||
this.tokenHead = tokenHead;
|
||||
}
|
||||
|
||||
/**
|
||||
* 内部过滤器方法,用于处理请求的认证逻辑
|
||||
* @param request HttpServletRequest对象,包含请求信息
|
||||
* @param response HttpServletResponse对象,用于响应
|
||||
* @param chain FilterChain过滤器链,用于传递请求和响应
|
||||
* @throws ServletException 可能抛出的Servlet异常
|
||||
* @throws IOException 可能抛出的IO异常
|
||||
*/
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
|
||||
// 从请求头中获取认证信息
|
||||
String authHeader = request.getHeader(this.tokenHeader);
|
||||
// 检查请求头是否存在且以指定的token前缀开头
|
||||
if (authHeader != null && authHeader.startsWith(this.tokenHead)) {
|
||||
// 提取实际的token值(去除前缀)
|
||||
final String authToken = authHeader.substring(this.tokenHead.length());
|
||||
try {
|
||||
// 从token中解析出用户名
|
||||
String username = jwtTokenUtil.getUsernameFromToken(authToken);
|
||||
|
||||
// 验证用户名不为空且当前没有已认证的用户
|
||||
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
|
||||
// 通过用户名加载用户详情
|
||||
UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
|
||||
|
||||
// 验证token的有效性
|
||||
if (jwtTokenUtil.validateToken(authToken, userDetails)) {
|
||||
// 创建认证对象
|
||||
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
|
||||
// 设置认证详情
|
||||
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
|
||||
// 将认证信息存入安全上下文
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
}
|
||||
}
|
||||
} catch (ExpiredJwtException e) {
|
||||
// 处理token过期异常
|
||||
sendErrorResponse(response, ResultCode.TOKEN_EXPIRED);
|
||||
return;
|
||||
} catch (SignatureException e) {
|
||||
// 处理token签名异常
|
||||
sendErrorResponse(response, ResultCode.TOKEN_INVALID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 继续过滤器链的处理
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送错误响应信息
|
||||
* @param response HTTP响应对象
|
||||
* @param resultCode 结果代码,包含错误信息
|
||||
* @throws IOException 可能抛出的IO异常
|
||||
*/
|
||||
private void sendErrorResponse(HttpServletResponse response, ResultCode resultCode) throws IOException {
|
||||
// 设置响应内容类型为JSON,字符编码为UTF-8
|
||||
response.setContentType("application/json;charset=UTF-8");
|
||||
// 设置HTTP状态码为401未授权
|
||||
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
|
||||
// 创建ObjectMapper实例,用于对象与JSON之间的转换
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
// 将失败结果转换为JSON字符串并写入响应输出流
|
||||
response.getWriter().write(mapper.writeValueAsString(R.fail(resultCode)));
|
||||
}
|
||||
}
|
||||
@@ -32,12 +32,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
/**
|
||||
* 重写Spring Security的loadUserByUsername方法,用于用户认证
|
||||
* @param username 用户名
|
||||
* @return UserDetails 用户详细信息
|
||||
* @throws UsernameNotFoundException 当用户未找到时抛出此异常
|
||||
*/
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||
// 根据用户名从数据库查询用户信息
|
||||
User user = userMapper.findByUsername(username);
|
||||
// 判断用户是否存在,如果不存在则抛出异常
|
||||
if (ObjectUtil.isNull(user)) {
|
||||
throw new UsernameNotFoundException("User not found with username: " + username);
|
||||
}
|
||||
// 返回UserDetails对象,包含用户名、密码和权限列表
|
||||
// 这里使用Spring Security提供的User类实现UserDetails接口
|
||||
// 参数分别为:用户名,密码,权限集合(这里使用空集合表示无额外权限)
|
||||
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>()); // 账号,密码,权限
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
spring:
|
||||
datasource:
|
||||
driver-class-name: org.sqlite.JDBC
|
||||
# url: jdbc:sqlite:C:\it\houtaigunli\biji\mydatabase.db
|
||||
url: jdbc:sqlite:C:\KAIFA\2\mydatabase.db
|
||||
url: jdbc:sqlite:C:\it\houtaigunli\biji\mydatabase.db
|
||||
jpa:
|
||||
hibernate:
|
||||
ddl-auto: none
|
||||
|
||||
Reference in New Issue
Block a user