登录认证(JWT) 📅 2026/8/19 12:05:26 登录认证JWT实验目的1.理解登录认证与会话管理的基本原理。2.掌握 JWTJSON Web Token的工作机制。3.掌握使用 JWT 实现用户登录认证。4.掌握接口鉴权拦截器/过滤器。5.实现登录保护未登录无法访问接口。实验环境开发工具IntelliJ IDEA构建工具Maven测试工具Postman或浏览器AI工具通义灵码实验要求在校园二手交易系统中实现登录认证功能1.实现用户登录接口2.登录成功返回 Token3.访问接口必须携带 Token4.未登录访问返回错误信息5.结合统一返回 Result 格式实验内容第一部分JWT简介Header头部.Payload载荷.Signature签名作用用于替代传统 Session实现无状态登录第二部分引入依赖dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt-api/artifactIdversion0.11.5/version/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt-impl/artifactIdscoperuntime/scope/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt-jackson/artifactIdscoperuntime/scope/dependency第三部分创建 JWT工具类import io.jsonwebtoken.*;import io.jsonwebtoken.security.Keys;import java.util.Date;import javax.crypto.SecretKey;public class JwtUtils {private static final SecretKey key Keys.secretKeyFor(SignatureAlgorithm.HS256);// 生成 Tokenpublic static String generateToken(String username){return Jwts.builder().setSubject(username).setExpiration(new Date(System.currentTimeMillis() 3600 * 1000)).signWith(key).compact();}// 解析 Tokenpublic static String parseToken(String token){return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody().getSubject();}}第四部分实现登录接口模拟用户登录PostMapping(/login)public ResultString login(String username, String password){// 简单模拟可改为数据库查询if(admin.equals(username) 123456.equals(password)){String token JwtUtils.generateToken(username);return Result.success(token);}else{return Result.error(用户名或密码错误);}}第五部分编写登录拦截器1.创建拦截器import jakarta.servlet.http.*;import org.springframework.web.servlet.HandlerInterceptor;public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {String token request.getHeader(token);if(token null || token.isEmpty()){throw new RuntimeException(未登录);}try {JwtUtils.parseToken(token);} catch (Exception e){throw new RuntimeException(token无效);}return true;}}2.注册拦截器Configurationpublic class WebConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/login);}}3.结合全局异常处理之前的实验中已实现ExceptionHandler(RuntimeException.class)public ResultString handleRuntimeException(RuntimeException e){return Result.error(e.getMessage());}第六部分测试功能1.登录接口请求POST http://localhost:8080/login参数usernameadminpassword123456返回{code: 200,message: 操作成功,data: token字符串}2.访问接口带tokentoken: xxx返回正常数据3.未携带 token返回{code: 500,message: 未登录,data: null}4.token错误返回{code: 500,message: token无效,data: null}