>Java >스프링 보안 필터는 Redis에서 세션 정보를 얻습니까?

스프링 보안 필터는 Redis에서 세션 정보를 얻습니까?

PHPz
PHPz앞으로
2024-02-09 22:30:08494검색

PHP 편집자 Zimo는 Spring Security 필터가 Redis에서 세션 정보를 얻는지 여부에 대한 질문에 답하기 위해 왔습니다. Spring Security는 완전한 인증 및 권한 부여 메커니즘 세트를 제공하는 강력한 보안 프레임워크입니다. 기본적으로 Spring Security는 HttpSession을 사용하여 사용자 세션 정보를 관리합니다. 그러나 구성을 통해 Redis와 같은 외부 저장소에 세션 정보를 저장할 수 있습니다. 이것의 장점은 분산된 세션 관리를 실현하고 시스템의 확장성을 향상시킬 수 있다는 것입니다. 따라서 Spring Security 필터는 Redis에서 세션 정보를 얻을 수 있습니다.

질문 내용

spring-boot, spring-security, spring-session을 사용하여 로그인 시스템을 구현하고, redis를 세션 저장소로 사용하려고 합니다.

내 구성:

으아아아

내 로그인 컨트롤러:

으아아아

및 인증 서비스:

으아아아

제 이해가 맞다면

this.securitycontextholderstrategy.setcontext(context); 인증은 스레드 로컬 컨텍스트와 같이 애플리케이션의 메모리에 보관되어야 합니다.

그리고

으아아아

세션 정보는 Redis에 저장되어야 합니다.

이제 로그인하면 데이터가 redis에 저장되어 있는 것을 볼 수 있습니다.

그러나 내 로그인 요청에 의해 반환된 내용을 확인할 때 다음이 표시됩니다.

세션 ID가 완전히 다릅니다.

첫 번째 질문은: 왜 이 ID가 일치하지 않나요? Spring은 어떤 키를 찾아야 할지 어떻게 알 수 있나요?

또 다른 질문은: Redis에서 데이터를 가져오려면 어떤 필터를 사용하나요? 필터 체인의 모든 필터를 디버깅하려고 합니다.

으아아아

하지만 어떻게든 httpserletrequest에서 세션 정보를 읽는 것 같습니다. 그러나 redis에서 키를 제거하면 키가 필요한 엔드포인트에 대한 인증이 실패합니다.

뭔가 놓쳤나요? Fitler가 시작되기 전에 redis에서 세션 정보를 검색하여 httpservlerrequest에 저장합니까? 아니면 Redis 데이터를 어떻게 읽나요?

도움을 주셔서 감사합니다.

해결 방법

세션 쿠키의 값은 base64로 인코딩됩니다.

으아아아 으아아아

따라서 base64로 디코딩하면 쿠키의 세션 ID가 Redis에 저장된 세션 ID와 일치합니다.

아직 읽지 않으셨다면 다음 문서를 추천합니다: https://www.php.cn/link/e27c71957d1e6c223e0d48a165da2ee1

특히 "세션 관리 구성 요소 이해" 섹션: https://www.php.cn/link/e27c71957d1e6c223e0d48a165da2ee1#understanding-session-management-comComponents

어떤 버전의 스프링 보안을 사용하고 있는지 언급하지 않으셨는데, 스프링 보안 6을 사용하고 계시는 것 같아요. 이 섹션에는 세션 인증과 관련된 다음 문장이 있습니다.

위 내용은 스프링 보안 필터는 Redis에서 세션 정보를 얻습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제