新闻详情

新闻详情

首页 / 资讯中心 / 详情

JavaWeb登录校验技术:Cookie-Session与JWT实战解析

发布时间:2026/9/11 3:57:59来源:尧图网络
JavaWeb登录校验技术:Cookie-Session与JWT实战解析
1. 登录校验技术全景解析在JavaWeb开发中登录校验是保障系统安全的第一道防线。现代Web应用通常采用三种主流技术方案Cookie-Session机制、Token令牌技术以及两者的混合模式。我们先从最基础的Cookie-Session开始拆解。1.1 Cookie工作原理深度剖析Cookie的本质是服务器发送到浏览器并保存在本地的小型文本数据。当浏览器再次请求同一服务器时会自动携带这些数据。关键属性包括Domain/PATH指定Cookie的作用域Expires/Max-Age控制有效期Secure仅HTTPS传输HttpOnly禁止JS访问SameSite防御CSRF攻击// Java中设置Cookie的典型代码 Cookie cookie new Cookie(user, uid123); cookie.setMaxAge(60*60*24); // 1天有效期 cookie.setPath(/); cookie.setHttpOnly(true); response.addCookie(cookie);关键经验生产环境必须设置HttpOnly和Secure属性这是防御XSS攻击的基本要求。Chrome 80版本对SameSite的默认策略变更需要显式设置SameSiteNone; Secure才能实现跨站传递。1.2 Session机制实现细节Session是服务器端的会话存储其核心流程包含创建唯一SessionID通常采用UUID通过Set-Cookie将SessionID写入客户端服务器维护Session存储内存/Redis/数据库请求时通过SessionID恢复会话状态// Session基本操作示例 HttpSession session request.getSession(); session.setAttribute(user, userObj); session.setMaxInactiveInterval(1800); // 30分钟过期常见陷阱默认情况下Tomcat使用JSESSIONID作为Cookie名称在多个应用共用一个域名时会发生覆盖。解决方案是通过context.xml配置cookieName属性。2. 令牌技术演进与实践2.1 JWT标准令牌详解JWT(JSON Web Token)由三部分组成Header声明算法和类型{alg: HS256, typ: JWT}Payload存储业务数据{sub:123,name:John,iat:1516239022}Signature防篡改签名Java生态中常用jjwt库实现String token Jwts.builder() .setSubject(123) .setExpiration(new Date(System.currentTimeMillis()3600000)) .signWith(SignatureAlgorithm.HS256, secret) .compact();2.2 刷新令牌模式为解决短期令牌频繁过期问题通常采用双Token方案Access Token短期有效如2小时Refresh Token长期有效如7天sequenceDiagram Client-Server: 使用refresh_token获取新access_token Server--Client: 返回新access_tokenrefresh_token性能优化Redis非常适合存储令牌关系可采用hash结构存储token关联信息设置自动过期时间与令牌有效期同步。3. 过滤器与拦截器实战3.1 Filter过滤链实现过滤器是Servlet规范定义的组件执行顺序由web.xml中 顺序决定public class AuthFilter implements Filter { Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; String token request.getHeader(Authorization); // 验证逻辑 if(!validToken(token)) { ((HttpServletResponse)res).sendError(401); return; } chain.doFilter(req, res); } }3.2 Spring拦截器应用Interceptor相比Filter能获取Spring上下文更适合业务校验public class AuthInterceptor extends HandlerInterceptorAdapter { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String uri request.getRequestURI(); if(uri.startsWith(/api/)) { User user (User) request.getSession().getAttribute(user); if(user null) { response.sendRedirect(/login); return false; } } return true; } }架构建议将过滤器和拦截器结合使用过滤器处理通用安全防护XSS/CSRF拦截器处理业务权限校验。4. 安全加固方案4.1 防御会话固定攻击// 登录成功后重置SessionID request.getSession().invalidate(); HttpSession newSession request.getSession(true);4.2 敏感操作二次验证// 使用Redis实现操作令牌 String confirmToken UUID.randomUUID().toString(); redisTemplate.opsForValue().set( confirm:userId, confirmToken, 5, TimeUnit.MINUTES);5. 性能优化实践5.1 分布式会话方案// Spring Session配置示例 EnableRedisHttpSession public class SessionConfig { Bean public LettuceConnectionFactory connectionFactory() { return new LettuceConnectionFactory(); } }5.2 令牌黑名单处理// 登出时将令牌加入黑名单 public void logout(String token) { long expire Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody() .getExpiration() .getTime(); redisTemplate.opsForValue().set( blacklist:token, 1, expire - System.currentTimeMillis(), TimeUnit.MILLISECONDS); }6. 现代认证架构演进6.1 OAuth2.0集成EnableAuthorizationServer public class AuthServerConfig extends AuthorizationServerConfigurerAdapter { Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient(client) .secret(passwordEncoder.encode(secret)) .authorizedGrantTypes(authorization_code, refresh_token) .scopes(read); } }6.2 无状态架构设计// 基于JWT的stateless方案 public class StatelessAuthFilter extends OncePerRequestFilter { Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) { String token req.getHeader(X-TOKEN); if(token ! null) { Claims claims Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); UsernamePasswordAuthenticationToken auth new UsernamePasswordAuthenticationToken( claims.getSubject(), null, AuthorityUtils.commaSeparatedStringToAuthorityList( claims.get(roles).toString())); SecurityContextHolder.getContext().setAuthentication(auth); } chain.doFilter(req, res); } }在实际项目开发中我通常会根据安全等级要求选择不同方案内部管理系统Cookie-Session 验证码移动端APIJWT 刷新令牌高安全系统双因素认证 短期令牌对于新启动的项目建议直接采用Spring Security OAuth2资源服务器方案可以灵活支持多种认证方式切换。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

无广告免费软件清单:10款装机必备工具,从官网下载告别捆绑 2026/9/11 4:37:04

无广告免费软件清单:10款装机必备工具,从官网下载告别捆绑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
shadPS4 如何在 Windows 上用 Visual Studio 2022 与 Clang x64 编译? 2026/9/11 4:37:04

shadPS4 如何在 Windows 上用 Visual Studio 2022 与 Clang x64 编译?

shadPS4 如何在 Windows 上用 Visual Studio 2022 与 Clang x64 编译? 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4 shadPS4 是一个用 …

阅读更多 →
GEO与AI搜索优化:2026数字营销技术革命 2026/9/11 4:37:04

GEO与AI搜索优化:2026数字营销技术革命

1. 项目概述:当GEO遇上AI搜索优化的技术革命2026年的数字营销领域正在经历一场静悄悄的革命——GEO(地理定位优化)技术已经从单纯的本地SEO进阶为结合人工智能的智能位置服务系统。最近三个月,全球头部营销工具Semrush的流量数据显…

阅读更多 →
贷款违约预测实战:特征工程、模型评估与Python源码实现 2026/9/11 4:37:04

贷款违约预测实战:特征工程、模型评估与Python源码实现

简介:一份面向机器学习初学者与金融风控从业者的贷款违约预测实践源码,基于Python实现完整建模流程。项目包含随机森林、决策树、梯度提升等多种模型训练与对比,附带数据分析与预测脚本,覆盖数据预处理、特征探索、模型评估等关键…

阅读更多 →
Next AI Draw.io MCP Server 端口 6002 被占用怎么解决 2026/9/11 4:37:04

Next AI Draw.io MCP Server 端口 6002 被占用怎么解决

Next AI Draw.io MCP Server 端口 6002 被占用怎么解决 【免费下载链接】next-ai-draw-io A next.js web application that integrates AI capabilities with draw.io diagrams. This app allows you to create, modify, and enhance diagrams through natural language comman…

阅读更多 →
含分布式电源的配电网优化:二阶锥松弛与YALMIP/MOSEK实现 2026/9/11 4:34:03

含分布式电源的配电网优化:二阶锥松弛与YALMIP/MOSEK实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞