feat: 세션 DB 이중 저장 — Redis 유실/재시작에도 로그인 유지
- auth_session 테이블에 세션 영속 백업(login 시 Redis+DB 동시 저장) - getSession: Redis 미스/장애 시 DB에서 복원 후 Redis 재수화(슬라이딩) - logout: Redis+DB 동시 삭제, 만료분 일별 정리(@Scheduled) - Redis 재시작으로 세션 전멸하던 주기적 로그아웃 해결 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.sb.web.auth.mapper.AuthSessionMapper">
|
||||
|
||||
<insert id="insert" parameterType="com.sb.web.auth.domain.AuthSession">
|
||||
INSERT INTO auth_session
|
||||
(token, member_id, login_id, name, role, provider, remember_me, expires_at, created_at)
|
||||
VALUES
|
||||
(#{token}, #{memberId}, #{loginId}, #{name}, #{role}, #{provider},
|
||||
#{rememberMe}, #{expiresAt}, NOW())
|
||||
ON DUPLICATE KEY UPDATE
|
||||
expires_at = #{expiresAt}
|
||||
</insert>
|
||||
|
||||
<select id="findByToken" resultType="com.sb.web.auth.domain.AuthSession">
|
||||
SELECT token, member_id, login_id, name, role, provider, remember_me, expires_at, created_at
|
||||
FROM auth_session
|
||||
WHERE token = #{token}
|
||||
</select>
|
||||
|
||||
<update id="updateExpiry">
|
||||
UPDATE auth_session SET expires_at = #{expiresAt} WHERE token = #{token}
|
||||
</update>
|
||||
|
||||
<delete id="delete">
|
||||
DELETE FROM auth_session WHERE token = #{token}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteExpired">
|
||||
DELETE FROM auth_session WHERE expires_at < #{now}
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user