Include FilterChain in SessionInformationExpiredEvent
Closes gh-14077
This commit is contained in:
		
							parent
							
								
									3117feff61
								
							
						
					
					
						commit
						095929f6e8
					
				| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2022 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +141,7 @@ public class ConcurrentSessionFilter extends GenericFilterBean {
 | 
			
		|||
						.of(() -> "Requested session ID " + request.getRequestedSessionId() + " has expired."));
 | 
			
		||||
					doLogout(request, response);
 | 
			
		||||
					this.sessionInformationExpiredStrategy
 | 
			
		||||
						.onExpiredSessionDetected(new SessionInformationExpiredEvent(info, request, response));
 | 
			
		||||
						.onExpiredSessionDetected(new SessionInformationExpiredEvent(info, request, response, chain));
 | 
			
		||||
					return;
 | 
			
		||||
				}
 | 
			
		||||
				// Non-expired - update last request date/time
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.security.web.session;
 | 
			
		||||
 | 
			
		||||
import jakarta.servlet.FilterChain;
 | 
			
		||||
import jakarta.servlet.http.HttpServletRequest;
 | 
			
		||||
import jakarta.servlet.http.HttpServletResponse;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +36,8 @@ public final class SessionInformationExpiredEvent extends ApplicationEvent {
 | 
			
		|||
 | 
			
		||||
	private final HttpServletResponse response;
 | 
			
		||||
 | 
			
		||||
	private final FilterChain filterChain;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Creates a new instance
 | 
			
		||||
	 * @param sessionInformation the SessionInformation that is expired
 | 
			
		||||
| 
						 | 
				
			
			@ -43,11 +46,25 @@ public final class SessionInformationExpiredEvent extends ApplicationEvent {
 | 
			
		|||
	 */
 | 
			
		||||
	public SessionInformationExpiredEvent(SessionInformation sessionInformation, HttpServletRequest request,
 | 
			
		||||
			HttpServletResponse response) {
 | 
			
		||||
		this(sessionInformation, request, response, null);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Creates a new instance
 | 
			
		||||
	 * @param sessionInformation the SessionInformation that is expired
 | 
			
		||||
	 * @param request the HttpServletRequest
 | 
			
		||||
	 * @param response the HttpServletResponse
 | 
			
		||||
	 * @param filterChain the FilterChain
 | 
			
		||||
	 * @since 6.4
 | 
			
		||||
	 */
 | 
			
		||||
	public SessionInformationExpiredEvent(SessionInformation sessionInformation, HttpServletRequest request,
 | 
			
		||||
			HttpServletResponse response, FilterChain filterChain) {
 | 
			
		||||
		super(sessionInformation);
 | 
			
		||||
		Assert.notNull(request, "request cannot be null");
 | 
			
		||||
		Assert.notNull(response, "response cannot be null");
 | 
			
		||||
		this.request = request;
 | 
			
		||||
		this.response = response;
 | 
			
		||||
		this.filterChain = filterChain;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -68,4 +85,12 @@ public final class SessionInformationExpiredEvent extends ApplicationEvent {
 | 
			
		|||
		return (SessionInformation) getSource();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @return the filter chain. Can be {@code null}.
 | 
			
		||||
	 * @since 6.4
 | 
			
		||||
	 */
 | 
			
		||||
	public FilterChain getFilterChain() {
 | 
			
		||||
		return this.filterChain;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2012-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2024 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -20,10 +20,12 @@ import java.util.Date;
 | 
			
		|||
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
 | 
			
		||||
import org.springframework.mock.web.MockFilterChain;
 | 
			
		||||
import org.springframework.mock.web.MockHttpServletRequest;
 | 
			
		||||
import org.springframework.mock.web.MockHttpServletResponse;
 | 
			
		||||
import org.springframework.security.core.session.SessionInformation;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -50,4 +52,13 @@ public class SessionInformationExpiredEventTests {
 | 
			
		|||
				new SessionInformation("fake", "sessionId", new Date()), new MockHttpServletRequest(), null));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void constructorWhenFilterChainThenGetFilterChainReturnsNotNull() {
 | 
			
		||||
		MockFilterChain filterChain = new MockFilterChain();
 | 
			
		||||
		SessionInformationExpiredEvent event = new SessionInformationExpiredEvent(
 | 
			
		||||
				new SessionInformation("fake", "sessionId", new Date()), new MockHttpServletRequest(),
 | 
			
		||||
				new MockHttpServletResponse(), filterChain);
 | 
			
		||||
		assertThat(event.getFilterChain()).isSameAs(filterChain);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue