Dla niektórych usług internetowych chcę wyłączyć korzystanie z sesji. Dodałem Create-session = „nigdy” do config:Opcja Spring create-session = "never" jest ignorowana w niektórych scenariuszach?
<beans:bean id="http403EntryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<http use-expressions="true" entry-point-ref="http403EntryPoint"
create-session="never">
<custom-filter ref="x509Filter" position="PRE_AUTH_FILTER"/>
</http>
Działa to w większości przypadków, z wyjątkiem gdy wstępnie uwierzytelniony użytkownik ma certyfikatu klienta, który nie jest zarejestrowany w aplikacji, więc nasz UwierzytelnianieUserDetailsService wyrzuca UsernameNotFoundException. Jeśli użytkownik nie ma certyfikatu lub ma zarejestrowany certyfikat, sesja nie jest tworzona (w odpowiedzi HTTP nie ma nagłówka Set-Cookie). W opisanym przypadku wysyłany jest plik cookie. To (plik cookie lub sesja) jest także oceniany na każde następne żądanie, nawet jeśli certyfikat klienta został zmieniony (zasadniczo umożliwiając atak naprawy sesji - aplikacja używa zapisanego uwierzytelnienia zamiast ponownego uwierzytelniania przy każdym połączeniu).
Używamy zabezpieczeń Spring 3.0.5. Testowane z Tomcat 6 i 7 oraz JBoss 7.1.1.
Dlaczego sesja została utworzona w opisanym scenariuszu?
PS: Problem utrwalenie sesja może być prawdopodobnie workarounded ustawiając checkForPrincipalChanges w AbstractPreAuthenticatedProcessingFilter, ale jestem zainteresowany odpowiedzią dlaczego sesja jest tworzony w ogóle.