Day1

Day1时遇见的报错和解决方案

运行启动类时报错"java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid"

  • lombok版本不兼容,(几年前的项目和现在肯定有点冲突),在xml文件中,更换lombok的依赖版本,改用1.18.30
  • jdk版本过高,用jdk23会发生报错,改用jdk17就OK了

在登录界面一直登录不进去

数据库没有连接成功,在application-dev.yml文件中更改一下账号密码,改成你自己的数据库账户密码就可以了

Apifox

YAPi登录不上可以用Apifox,新建项目->导入文件->YApi


JWT

这段代码实现了基于 JWT(JSON Web Token)的用户认证令牌生成逻辑

Map<String, Object> claims = new HashMap<>(); //创建声明
claims.put(JwtClaimsConstant.EMP_ID, employee.getId()); //存放员工ID和主键值
  • Claims:JWT的核心部分,用于储存用户信息和元数据
  • JwtClaimsConstant.EMP_ID:常量,通常是字符串"emp_id",作为员工 ID 的键
  • employee.getId():从数据库查询的员工对象中获取 ID 值

String token = JwtUtil.createJWT(
       jwtProperties.getAdminSecretKey(),
       jwtProperties.getAdminTtl(),
       claims);
  • JwtUtil.createJWT():工具类方法,负责生成 JWT
  • jwtProperties:配置类,读取配置文件中的 JWT 参数
    • adminSecretKey:签名密钥(如"your-32-char-secret"
    • adminTtl:令牌有效期(如3600000毫秒 = 1 小时)
  • claims:包含用户信息的 Map


@RequestMapping("/admin/employee")
@PostMapping("/login")
  • @RequestMapping 是 Spring 框架中用于处理 HTTP 请求映射的注解,它可以将 HTTP 请求映射到具体的控制器方法上。
  • @PostMapping("/login") 是 Spring MVC 中用于处理 HTTP POST 请求的注解,专门用于映射登录接口。它是 @RequestMapping(method = RequestMethod.POST) 的快捷方式

Nginx的反向代理

前端请求地址:http://localhost/api/employee/login

image

后端接口地址:http://localhost:8080/admin/employee/login


可以发现前端请求地址和后端接口地址不一致,这就是跨域问题


Nginx解决的这个问题,他实现了反向代理

image

image




静态资源映射


设置静态资源映射指的是将服务器上的静态资源(如图片、CSS、JavaScript、字体文件等)与客户端(浏览器)请求的 URL 路径建立对应关系,让客户端能通过特定的 URL 访问到这些资源。


为什么需要静态资源映射?

  • 静态资源通常存储在服务器的本地文件系统中(如/usr/local/webapp/static/images),但客户端无法直接访问服务器的本地路径(出于安全和规范考虑)。
  • 通过映射,开发者可以用简洁、统一的 URL(如http://example.com/static/logo.png)替代复杂的本地路径,方便客户端请求。
  • 同时,映射还能实现资源访问控制、路径简化、缓存策略配置等功能。

举个例子理解

假设服务器上有一张图片,实际存储路径是:
D:/project/src/main/resources/static/images/logo.png

如果不设置映射,客户端无法直接通过这个本地路径访问。
通过配置映射后,我们可以规定:

  • 当客户端请求http://localhost:8080/static/images/logo.png时,服务器自动对应到本地路径D:/project/src/main/resources/static/images/logo.png,并返回该图片。

这里的/static就是映射的 “前缀”,它关联了服务器的实际资源目录。


Spring Boot(Java)
在配置类中通过addResourceHandlers方法设置:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射URL路径"/static/**"到本地目录"classpath:/static/"
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
}

总结

静态资源映射的核心是建立 “客户端 URL 路径” 与 “服务器本地资源路径” 的对应关系,其目的是让客户端能安全、便捷地访问静态资源,同时简化开发和维护。无论是后端框架还是服务器,都提供了灵活的配置方式来实现这一功能。

posted @ 2025-07-16 12:00  li_hc  阅读(36)  评论(1)    收藏  举报