나는 SpringMVC를 사용하여 인터페이스하려는 컴퓨터에서 HTTP 요청을 수신합니다. 시스템의 XML 데이터는 HTTP 요청 본문에 기록됩니다. 기본적으로쿠키를 사용하지 않는 스프링 보안 세션
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo version="2.0" xmlns="http://www.example.com/ns">
<Bar sessionId="2" />
<Baz quux="Monitor" seq="123">
...
</Baz>
</Foo>
기계가 쿠키를 보관하지 못합니다. 그래서 JSESSIONID를 통해 세션 데이터를 사용할 수 없습니다. 내가 가진 것은 Bar에있는 sessionId뿐입니다. 이 sessionId는 첫 번째 요청에서 내 시스템에 의해 부여되어야합니다. 즉,
1 단계 : 기계
2 단계 나에게 세션 요청을 전송 : 웹 응용 프로그램은 세션을 만든 다음 그 다음 저장하고 후속 요청에 사용되는 시스템에 세션 유형 응답을 보냅니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo version="2.0" xmlns="http://www.example.com/ns">
<Bar sessionId="2" />
<Session quux="Monitor" seq="123">
...
</Session>
</Foo>
3 단계 : 컴퓨터와 웹 응용 프로그램 간의 통신에 이제 sessionId가 사용됩니다.
질문 :
- 는 봄 보안이 sessionId가 기반으로하는 연결로 세션을 할당 할에 수 있습니까? 이 경우 XML의 sessionId가 쿠키 JSESSIONID처럼 작동합니다. HTTP 헤더 나 URL 대신 XML에서 세션 ID를 검색하도록 스프링 보안을 설정할 수 있습니까?
- 다른 시스템에 이런 종류의 문제가 있는지 그리고이 문제에 대해 자세히 조사 할 수 있는지 알고 싶습니다.
본인의 의견을 바탕으로 해결책을 찾아 보겠습니다. 내가 너에게 돌아갈거야. 필자의 경우 클라이언트 컴퓨터가하는 일을 제어 할 수 없습니다. 내가 아는 전부는 내가 생성 한 sessionId를 수신하고 후속 요청에서 해당 sessionId를 사용한다는 것입니다. – nmenego
[SecurityContextRepository 구현] (https://github.com/manish-in-java/spring-security-rest/blob/master/api/src/main/scala/org/example/api/security/)을 살펴보십시오. EhcacheSecurityContextRepository.scala)를 샘플 앱에 추가합니다. 요청 헤더를 검사하여 세션 쿠키와 동등한 것이 클라이언트에 의해 보내 졌는지 확인합니다. 그렇다면 메모리 캐시에서 인증 토큰을 추출하여 실행중인 스레드에 연결합니다. 헤더 대신 요청 본문에서 토큰을 추출해야합니다. 이 작업을 수행하는 경우 모든 요청에 대해 XML 비 직렬화를 피할 수 있습니다. – manish