提交 d51466bc 编写于 作者: K kohsuke

[FIXED HUDSON-3878] Filter cannot be assumed to be present when Hudson starts up.

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@18997 71c3de6d-444a-0410-be80-ed276b4c234a
上级 606af32c
......@@ -2281,7 +2281,6 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
public void setCrumbIssuer(CrumbIssuer issuer) {
crumbIssuer = issuer;
CrumbFilter.get(servletContext).setCrumbIssuer(issuer);
}
public void setUseCrumbs(Boolean use) {
......
......@@ -5,6 +5,8 @@
*/
package hudson.security.csrf;
import hudson.model.Hudson;
import java.io.IOException;
import java.util.Enumeration;
import java.util.logging.Logger;
......@@ -27,38 +29,21 @@ import javax.servlet.http.HttpServletResponse;
*
*/
public class CrumbFilter implements Filter {
private volatile CrumbIssuer crumbIssuer;
public CrumbIssuer getCrumbIssuer() {
return crumbIssuer;
}
public void setCrumbIssuer(CrumbIssuer issuer) {
crumbIssuer = issuer;
}
/**
* Gets the {@link CrumbFilter} created for the given {@link ServletContext}.
* Because servlet containers generally don't specify the ordering of the initialization
* (and different implementations indeed do this differently --- See HUDSON-3878),
* we cannot use Hudson to the CrumbIssuer into CrumbFilter eagerly.
*/
public static CrumbFilter get(ServletContext context) {
return (CrumbFilter) context.getAttribute(CrumbFilter.class.getName());
public CrumbIssuer getCrumbIssuer() {
return Hudson.getInstance().getCrumbIssuer();
}
/**
* {@inheritDoc}
*/
public void init(FilterConfig filterConfig) throws ServletException {
// this is how we make us available to the rest of Hudson.
filterConfig.getServletContext().setAttribute(CrumbFilter.class.getName(), this);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (crumbIssuer == null) {
chain.doFilter(request, response);
return;
}
if (!(request instanceof HttpServletRequest)) {
CrumbIssuer crumbIssuer = getCrumbIssuer();
if (crumbIssuer == null || !(request instanceof HttpServletRequest)) {
chain.doFilter(request, response);
return;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册