Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ public abstract class AbstractTicketValidationFilter extends AbstractCasFilter {
*/
private boolean useSession = true;

private static final String X_REAL_IP = "x-real-ip";

private String internalIp = null;

protected AbstractTicketValidationFilter(final Protocol protocol) {
super(protocol);
}
Expand All @@ -85,6 +89,10 @@ protected TicketValidator getTicketValidator(final FilterConfig filterConfig) {
return this.ticketValidator;
}

public void setInternalIp(String internalIp) {
this.internalIp = internalIp;
}

/**
* Gets the ssl config to use for HTTPS connections
* if one is configured for this filter.
Expand Down Expand Up @@ -132,6 +140,7 @@ protected void initInternal(final FilterConfig filterConfig) throws ServletExcep
setExceptionOnValidationFailure(getBoolean(ConfigurationKeys.EXCEPTION_ON_VALIDATION_FAILURE));
setRedirectAfterValidation(getBoolean(ConfigurationKeys.REDIRECT_AFTER_VALIDATION));
setUseSession(getBoolean(ConfigurationKeys.USE_SESSION));
setInternalIp(getString(ConfigurationKeys.INTERNAL_IP));

if (!this.useSession && this.redirectAfterValidation) {
logger.warn("redirectAfterValidation parameter may not be true when useSession parameter is false. Resetting it to false in order to prevent infinite redirects.");
Expand Down Expand Up @@ -192,12 +201,18 @@ protected void onFailedValidation(final HttpServletRequest request, final HttpSe
public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
final FilterChain filterChain) throws IOException, ServletException {

final HttpServletRequest request = (HttpServletRequest) servletRequest;
final HttpServletResponse response = (HttpServletResponse) servletResponse;

if (!preFilter(servletRequest, servletResponse, filterChain)) {
if (isInternalRequest(request)) {
logger.debug("Request is ignored [internal].");
filterChain.doFilter(request, response);
}

return;
}

final HttpServletRequest request = (HttpServletRequest) servletRequest;
final HttpServletResponse response = (HttpServletResponse) servletResponse;
final String ticket = retrieveTicketFromRequest(request);

if (CommonUtils.isNotBlank(ticket)) {
Expand Down Expand Up @@ -255,4 +270,14 @@ public final void setExceptionOnValidationFailure(final boolean exceptionOnValid
public final void setUseSession(final boolean useSession) {
this.useSession = useSession;
}

private boolean isInternalRequest(final HttpServletRequest request) {
if (this.internalIp == null) {
return false;
}

String realIp = request.getHeader(X_REAL_IP);

return this.internalIp.equals(realIp);
}
}