The problem was that the Central Authentication Service (CAS) would invalidate the session tokens after 8 hours. And since most people start at 08h00, the problem would only manifest after 16h00. At this point, the authentication system and the response filter started a tug o’ war – the authentication system trying to redirect the response to the login page and the response filter trying to flush the filtered response back to the client.
Special thanks to Mike D for figuring it out, without even looking at a single line of code… I had to hand over one of my hats.
The solution was simple – to bypass the filter if the response is being redirected (301), line 11:
public class WebApplication : System.Web.HttpApplication
{
public WebApplication()
{
ReleaseRequestState += new EventHandler(OnReleaseRequestState);
}
void OnReleaseRequestState(object sender, EventArgs e)
{
// Ensure that the request is not being redirected before applying the filter
if (HttpContext.Current.Response.StatusCode == (int)HttpStatusCode.Redirect)
return;
// Install the filter
var response = HttpContext.Current.Response;
var request = HttpContext.Current.Request;
response.Filter = new SecurityFilterStream(response.Filter, request);
}
}
