Skip to content

Cannot configure SecurityContextRepository in CasAuthenticationFilter #14529

Closed
@sammyhk

Description

@sammyhk

Describe the bug
CasAuthenticationFilter set a reference of SecurityContextRepository (

setSecurityContextRepository(this.securityContextRepository);
) in itself and use it in
this.securityContextRepository.saveContext(context, request, response);
which cause the setSecurityContextRepository(...) defined in parent class AbstractAuthenticationProcessingFilter not configurable anymore.
The securityContextRepository reference is just for the call of successfulAuthentication(...) (
this.logger.debug(
LogMessage.format("Authentication success. Updating SecurityContextHolder to contain: %s", authResult));
SecurityContext context = this.securityContextHolderStrategy.createEmptyContext();
context.setAuthentication(authResult);
this.securityContextHolderStrategy.setContext(context);
this.securityContextRepository.saveContext(context, request, response);
if (this.eventPublisher != null) {
this.eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));
}
).
For me, seems like it is just duplicating the code defined in parent class AbstractAuthenticationProcessingFilter (
SecurityContext context = this.securityContextHolderStrategy.createEmptyContext();
context.setAuthentication(authResult);
this.securityContextHolderStrategy.setContext(context);
this.securityContextRepository.saveContext(context, request, response);
if (this.logger.isDebugEnabled()) {
this.logger.debug(LogMessage.format("Set SecurityContextHolder to %s", authResult));
}
this.rememberMeServices.loginSuccess(request, response, authResult);
if (this.eventPublisher != null) {
this.eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));
}
this.successHandler.onAuthenticationSuccess(request, response, authResult);
) and can be rewritten to avoid the securityContextRepository reference defined in CasAuthenticationFilter.
Example:

@Override
protected final void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
		FilterChain chain, Authentication authResult) throws IOException, ServletException {
	boolean continueFilterChain = proxyTicketRequest(serviceTicketRequest(request, response), request);
	super.successfulAuthentication(request, response, chain, authResult);
	if (continueFilterChain) {
		chain.doFilter(request, response);
	}
}

Expected behavior
CasAuthenticationFilter should be able to configure different SecurityContextRepository by calling setSecurityContextRepository(...)

Metadata

Metadata

Labels

in: casAn issue in spring-security-castype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions