2015-04-29 21 views
6

Bazı web servisleri için oturum kullanımını devre dışı bırakmak istiyorum. Ben create-oturumu ekledi = "asla" config: böyleceSpring seçeneği create-session = "Hiçbir zaman" bazı senaryolarda dikkate alınmaz mı?

<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> 

Bu önceden doğrulanmış kullanıcı uygulamasında kayıtlı olmayan bir istemci sertifikası vardır dışında, çoğu durum için çalışır, bizim AuthenticationUserDetailsService, UsernameNotFoundException atar. Kullanıcının sertifikası yoksa veya kayıtlı bir sertifikası varsa, hiçbir oturum oluşturulmaz (HTTP yanıtında Set-Çerez başlığı yok). Tarif edilen durumda bir çerez gönderilir. İstemci sertifikası değiştirilse bile (her oturumda yeniden kimlik doğrulaması yapmak yerine kaydedilmiş kimlik doğrulamasını kullanır) istemci isteğinin değişmesine rağmen (sırasıyla, çerez sırasıyla oturum) her istekte değerlendirilir.

Yay güvenliği 3.0.5 kullanıyoruz. Tomcat 6 ve 7 ve ayrıca JBoss 7.1.1 ile test edilmiştir.

Tanımlanan senaryoda neden bir oturum oluşturuldu?

Not: oturum belirleme sorun muhtemelen checkForPrincipalChanges AbstractPreAuthenticatedProcessingFilter yılında ayarlayarak Examples ama bir oturum hiç oluşturulur neden cevap ilgileniyorum edilebilir.

cevap

3

suçlu https://jira.spring.io/browse/SEC-1476 edildi: AbstractPreAuthenticatedProcessingFilter sınıfında aşağıdaki yöntem var istisna bir oturum oluşturmak ve saklamak istiyorum yetkisiz erişim durumunda

: geçen düzeltme olarak

protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) { 
    SecurityContextHolder.clearContext(); 

    if (logger.isDebugEnabled()) { 
     logger.debug("Cleared security context due to exception", failed); 
    } 
    request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, failed); 
} 

değişti satırı, getSession() çağrısını kaldırdı, böylece AuthenticationException istekte saklanır.

projemizi düzeltmek için ben X509AuthenticationFilter genişleten yeni bir sınıf yarattı ve ben de getSession() çağrı kaldırıldı dışında orada ben aynı içeriğe sahip unsuccessfulAuthentication
yöntemi overrode.

İlgili konular