96SEO 2026-06-04 10:12 1
作为一名Java后端高级开发,我敢说“七天免登录”是业务系统里Zui常见的需求之一——用户登录一次后一周内 访问系统无需重复输入账号密码,直接就Neng进入主页。
这个需求kan似简单,但实现不好hen容易踩坑:要么免登录失效影响用户体验,要么出现安全漏洞导致账号被盗。

hen多初级开发会直接把用户信息存Cookie,或者简单用Session过期时间控制,这些Zuo法要么不安全,要么在分布式环境下失效。
今天这篇文章,我就结合实际工作经验,讲透“七天免登录”的标准实现方案,从原理到代码全拆解,kan完就Neng直接落地。
一、先搞懂:七天免登录的核心原理免登录的本质hen简单:用户首次登录成功后服务器生成一个“身份凭证”返回给客户端,客户端持久化存储;后续用户访问时自动携带这个凭证,服务器验证通过后就直接放行。
这里的关键是解决三个问题:
工作中Zui成熟的方案是:Cookie + JWT Token + Redis黑名单。
为什么选这个组合?
核心优势:JWT自带过期时间和签名机制,Neng避免伪造;Cookie自动携带凭证,无需前端额外处理;Redis存储黑名单,解决JWT无法主动失效的问题,还Neng支撑分布式系统。
二、分步实现:七天免登录完整流程我们基于Spring Boot框架实现,整体流程分为5步:用户登录生成凭证→客户端存储凭证→拦截器校验凭证→活跃续期→退出登录失效。
下面逐一拆解,代码可直接复用。
. 第一步:准备依赖和核心配置引入JWT和Redis依赖:
<!-- JWT依赖 --><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>.</version></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>.</version> <scope>runtime</scope></dependency><dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>.</version> <scope>runtime</scope></dependencygt;<!-- Redis依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
. 然后在application.yml配置JWT密钥、过期时间、Cookie参数:
# JWT配置jwt: secret: your-secret-key-32bytes-long- # 密钥必须足够长,放配置中心,不要硬编码 expire: # 7天过期 refresh-expire: # 1天内活跃自动续期# Cookie配置cookie: name: auto_login_token # Cookie名称 domain: localhost # 域名 path: / # 作用路径 max-age: # 7天 http-only: true # 仅HTTP访问,禁止JS操作 secure: false # 生产环境开启HTTPS后设为true same-site: Lax # 防CSRF攻击
. 第二步:封装JWT工具类. JWT负责生成和解析身份凭证,核心是“签名防伪造”和“自带过期时间”。工具类包含三个核心方法:生成Token、解析Token、验证Token合法性。
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.crypto.SecretKey;
import java.util.Date;
import java.util.Map;
@Component
public class JwtUtil {
// .
注入JWT密钥和过期时间
@Value
private String secret;
@Value
private long expire;
// .
生成JWT Token
public String generateToken {
// .
密钥编码
SecretKey key = Keys.hmacShaKeyFor);
return Jwts.builder
.setClaims
.setIssuedAt)
.setExpiration + expire))
.signWith
.compact;
}
// .
解析Token
public Claims parseToken {
SecretKey key = Keys.hmacShaKeyFor);
return Jwts.parserBuilder
.setSigningKey
.build
.parseClaimsJws
.getBody;
}
// .
验证Token合法性
public boolean validateToken {
try {
Claims claims = parseToken;
// .
检查是否过期
return !claims.getExpiration.before);
} catch {
// .
解析失败dou返回false
return false;
}
}
}
. 第三步:登录接口生成凭证
用户首次 登录 成功后, 生成JWT Token, 然后通过Cookie返回给客户端存储. 这里要注意,敏感信息不Neng放进JWT载荷,只放非敏感的用户标识。
@RestController
public class LoginController {
@Autowired
private UserService userService;
@Autowired
private JwtUtil jwtUtil;
@PostMapping
public Result login {
// .
校验账号密码
User user = userService.verifyUser, loginDTO.getPassword);
if {
return Result.fail;
}
// .
生成JWT Token
Map claims = new HashMap<>;
claims.put);
claims.put);
String token = jwtUtil.generateToken;
// .
设置Cookie
Cookie cookie = new Cookie;
cookie.setDomain;
cookie.setPath;
cookie.setMaxAge;
cookie.setHttpOnly;
response.addCookie;
return Result.success;
}
}
. 第四步:拦截器校验凭证
后续用户访问时,浏览器会自动携带Cookie中的Token. 用Spring拦截器拦截所有请求,校验Token合法性。
public class AutoLoginInterceptor implements HandlerInterceptor {
@Autowired
private JwtUtil jwtUtil;
@Override
public boolean preHandle throws Exception {
// .
从Cookie中获取Token
String token = null;
Cookie cookies = request.getCookies;
if {
for {
if )) {
token = cookie.getValue;
break;
}
}
}
// .
校验Token
if ) {
response.sendRedirect;
return false;
}
return true;
}
}
. 注册拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public AutoLoginInterceptor autoLoginInterceptor {
return new AutoLoginInterceptor;
}
@Override
public void addInterceptors {
registry.addInterceptor)
.addPathPatterns
.excludePathPatterns;
}
}
. 第五步:退出登录
用户主动退出 登录 时,需要清除客户端的Cookie,同时将Token加入Redis黑名单。
@PostMapping
public Result logout {
// .
从Cookie中获取Token
String token = null;
Cookie cookies = request.getCookies;
if {
for {
if )) {
token = cookie.getValue;
break;
}
}
}
// .
清除Cookie
Cookie cookie = new Cookie;
cookie.setMaxAge;
response.addCookie;
// .
加入黑名单
redisTemplate.opsForValue.set, TimeUnit.MILLISECONDS);
return Result.success;
}
综上所述,我们实现了 七天 免登录功Neng,通过结合JWT和Redis,我们不仅保证了用户的 登录 体验,还确保了系统的安全性。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback