Skip to content

Commit 57684f9

Browse files
authored
[CCAP-1591] Making session expirations return a 403 for XHR requests (#1005)
1 parent 519847e commit 57684f9

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/main/java/formflow/library/config/SessionExpiredCSRFAccessDeniedHandler.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,22 @@ public void handle(HttpServletRequest request,
4747
if (likelyExpired) {
4848
log.info("CSRF denied with missing session. Treating as expired session. URI: {}", request.getRequestURI());
4949

50-
// Use param to denote expired session on home screen
51-
response.sendRedirect(request.getContextPath() + "/?sessionExpired=true");
50+
if (isAjaxRequest(request)) {
51+
// XHR callers cannot follow redirects, so return an error they can handle.
52+
response.setHeader("X-Session-Expired", "true");
53+
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Session expired");
54+
} else {
55+
// Use param to denote expired session on home screen
56+
response.sendRedirect(request.getContextPath() + "/?sessionExpired=true");
57+
}
5258
return;
5359
}
5460

5561
// Preserve Spring Security default behavior in a real CSRF mismatch
5662
defaultHandler.handle(request, response, ex);
5763
}
64+
65+
private boolean isAjaxRequest(HttpServletRequest request) {
66+
return "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
67+
}
5868
}
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package formflow.library.exceptions;
22

3-
public class SessionExpiredException extends RuntimeException {
3+
import org.springframework.http.HttpStatus;
4+
import org.springframework.web.server.ResponseStatusException;
5+
6+
public class SessionExpiredException extends ResponseStatusException {
7+
48
public SessionExpiredException(String message) {
5-
super(message);
9+
super(HttpStatus.NOT_FOUND, message);
610
}
711
}

0 commit comments

Comments
 (0)