跳转至

2025年8月23日

面试题

SpringMVC 怎么处理异常?(项目中异常如何处理的?)

SpringMVC 的异常处理,就比较简单了,可以直接使用 Spring MVC 中的全局异常处理器对异常进行统一处理,此时在我们的三层架构中,都不需要处理异常了,如果运行过程中出现异常,最终会被全局异常处理器捕获,然后返回统一的错误信息。

开发一个全局异常处理器需要使用到两个注解:@RestControllerAdvice 、@ExceptionHandler,@RestControllerAdvice加在全局异常处理器的这个类上,而 @ExceptionHandler 加在异常处理的方法上,来指定这个方法捕获什么样的异常。

那在定义异常处理方法的时候,可以也定义多个,根据业务的需求,可以针对不同类型的异常,进行不同的处理。

午间演讲示例

在SpringMVC中,我们通常使用全局异常处理器来统一处理异常,这样三层架构里就不用到处写 try...catch 了。

实现时在类上加 @RestControllerAdvice,在方法上用 @ExceptionHandler 指定要捕获的异常。

实际项目中,可以定义多个方法,针对不同异常返回不同提示,从而实现统一又灵活的异常管理。

登录及登录校验的逻辑(如何颁发令牌 / 校验令牌?)

午间演讲示例

登录时,用户先输入账号和密码,后台验证通过后,不是直接存 Session,而是生成一个令牌,比如 JWT,里面包含用户信息和过期时间。这个令牌会返回给前端,前端保存在 localStorage 或者 cookie 里。

后续请求时,前端会在请求头里带上这个令牌,后台接收到后会验证签名和过期时间,如果合法就放行,否则返回未登录或令牌失效的提示。

项目中使用的会话跟踪技术

午间演讲示例

项目中常见的会话跟踪方式有Cookie、Session和令牌机制。

项目前后端分离,所以主要用JWT令牌来做会话跟踪,登录成功后生成令牌返回前端,后续请求都带上令牌。

介绍 JWT 令牌的组成?(防篡改 / 使用的签名算法?)

JWT 全称是 JSON Web Token,它由三部分组成:

  1. Header(头部) :主要包含令牌类型(JWT)和签名算法(如HS256)。
  2. Payload(负载) :存放用户信息和一些声明,比如用户ID、角色、过期时间等,不要放敏感数据。
  3. Signature(签名) :把前两部分用指定的算法和密钥进行签名,生成的字符串,用来保证数据没有被篡改。

这三部分用点号.拼接,形成最终的JWT令牌,比如:xxxxx.yyyyy.zzzzz

防篡改原理 JWT本身是明文的,但签名部分确保了防篡改。服务器在校验时,会用相同的算法和密钥重新计算签名,如果和令牌里带的签名一致,就说明数据没被改过;否则说明令牌被篡改了,直接判定无效。

常用签名算法 最常用的是 HMAC SHA256(HS256) ,属于对称加密算法,服务端用同一个密钥生成和验证。也可以用 RSA(RS256) 这种非对称加密算法,私钥生成签名,公钥验证签名,更适合安全要求更高的场景。

午间演讲示例

JWT 由三部分组成:Header 头部、Payload 负载和 Signature 签名。

签名部分用密钥和算法生成,保证数据防篡改。

常用的签名算法有HS256(对称)和RS256(非对称)。