1 package org.collectionspace.authentication.spring;
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10 import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
13 * A LogoutSuccessHandler that reads the post-logout redirect URL from a parameter in the logout
14 * request. As an anti-phishing security measure, the URL is checked against a list of permitted
15 * redirect URLs (originating from tenant binding configuration or OAuth client configuration).
17 public class CSpaceLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
18 final Logger logger = LoggerFactory.getLogger(CSpaceLogoutSuccessHandler.class);
20 public static final String REDIRECT_PARAMETER_NAME = "redirect";
22 private Set<String> permittedRedirectUris;
24 public CSpaceLogoutSuccessHandler(String defaultTargetUrl, Set<String> permittedRedirectUris) {
27 this.setDefaultTargetUrl(defaultTargetUrl);
29 this.permittedRedirectUris = permittedRedirectUris;
33 protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) {
34 String redirectUrl = request.getParameter(REDIRECT_PARAMETER_NAME);
36 if (redirectUrl != null && !isPermitted(redirectUrl)) {
37 logger.warn("Logout redirect url not permitted: {}", redirectUrl);
42 return (redirectUrl != null)
44 : super.determineTargetUrl(request, response);
47 private boolean isPermitted(String redirectUrl) {
48 return permittedRedirectUris.contains(redirectUrl);