|
@@ -20,7 +20,7 @@ import org.springframework.security.web.WebAttributes;
|
|
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
|
|
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
|
|
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
|
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
|
import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices;
|
|
import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices;
|
|
-import org.springframework.security.web.csrf.CsrfToken;
|
|
|
|
|
|
+import org.springframework.util.Assert;
|
|
import org.springframework.web.filter.GenericFilterBean;
|
|
import org.springframework.web.filter.GenericFilterBean;
|
|
|
|
|
|
import javax.servlet.FilterChain;
|
|
import javax.servlet.FilterChain;
|
|
@@ -31,7 +31,9 @@ import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpSession;
|
|
import javax.servlet.http.HttpSession;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.util.Collections;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.function.Function;
|
|
|
|
|
|
/**
|
|
/**
|
|
* For internal use with namespace configuration in the case where a user doesn't
|
|
* For internal use with namespace configuration in the case where a user doesn't
|
|
@@ -60,6 +62,8 @@ public class DefaultLoginPageGeneratingFilter extends GenericFilterBean {
|
|
private String openIDusernameParameter;
|
|
private String openIDusernameParameter;
|
|
private String openIDrememberMeParameter;
|
|
private String openIDrememberMeParameter;
|
|
private Map<String, String> oauth2AuthenticationUrlToClientName;
|
|
private Map<String, String> oauth2AuthenticationUrlToClientName;
|
|
|
|
+ private Function<HttpServletRequest,Map<String,String>> resolveHiddenInputs = request -> Collections
|
|
|
|
+ .emptyMap();
|
|
|
|
|
|
|
|
|
|
public DefaultLoginPageGeneratingFilter() {
|
|
public DefaultLoginPageGeneratingFilter() {
|
|
@@ -107,6 +111,18 @@ public class DefaultLoginPageGeneratingFilter extends GenericFilterBean {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Sets a Function used to resolve a Map of the hidden inputs where the key is the
|
|
|
|
+ * name of the input and the value is the value of the input. Typically this is used
|
|
|
|
+ * to resolve the CSRF token.
|
|
|
|
+ * @param resolveHiddenInputs the function to resolve the inputs
|
|
|
|
+ */
|
|
|
|
+ public void setResolveHiddenInputs(
|
|
|
|
+ Function<HttpServletRequest, Map<String, String>> resolveHiddenInputs) {
|
|
|
|
+ Assert.notNull(resolveHiddenInputs, "resolveHiddenInputs cannot be null");
|
|
|
|
+ this.resolveHiddenInputs = resolveHiddenInputs;
|
|
|
|
+ }
|
|
|
|
+
|
|
public boolean isEnabled() {
|
|
public boolean isEnabled() {
|
|
return formLoginEnabled || openIdEnabled || oauth2LoginEnabled;
|
|
return formLoginEnabled || openIdEnabled || oauth2LoginEnabled;
|
|
}
|
|
}
|
|
@@ -282,11 +298,9 @@ public class DefaultLoginPageGeneratingFilter extends GenericFilterBean {
|
|
}
|
|
}
|
|
|
|
|
|
private void renderHiddenInputs(StringBuilder sb, HttpServletRequest request) {
|
|
private void renderHiddenInputs(StringBuilder sb, HttpServletRequest request) {
|
|
- CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
|
|
|
|
-
|
|
|
|
- if (token != null) {
|
|
|
|
- sb.append(" <input name=\"" + token.getParameterName()
|
|
|
|
- + "\" type=\"hidden\" value=\"" + token.getToken() + "\" />\n");
|
|
|
|
|
|
+ for(Map.Entry<String,String> input : this.resolveHiddenInputs.apply(request).entrySet()) {
|
|
|
|
+ sb.append(" <input name=\"" + input.getKey()
|
|
|
|
+ + "\" type=\"hidden\" value=\"" + input.getValue() + "\" />\n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|