VIVO-1008 Refine the mime type: if no extension, then HTML

When behind Apache, some HTML pages were coming out as text/plain
This commit is contained in:
Jim Blake 2015-03-31 13:30:04 -04:00
parent afde710d9a
commit 12ccf8ed9e

View file

@ -3,11 +3,11 @@
package edu.cornell.mannlib.vitro.webapp.filters;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@ -16,6 +16,7 @@ import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class CharsetEncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Nothing to set up
@ -26,25 +27,51 @@ public class CharsetEncodingFilter implements Filter {
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
ServletContext ctx = req.getSession().getServletContext();
String url = req.getRequestURL().toString();
if (!ServletFileUpload.isMultipartContent(req)) {
servletRequest.setCharacterEncoding("UTF-8");
}
if (req.getContentType() == null) {
String typeFromContext = ctx.getMimeType(url);
if (typeFromContext == null) {
servletResponse.setContentType("text/html;charset=UTF-8");
} else {
servletResponse.setContentType(typeFromContext);
}
}
setCharacterEncodingOnRequest(req);
setContentTypeOnResponse(req, servletResponse);
filterChain.doFilter(servletRequest, servletResponse);
}
private void setCharacterEncodingOnRequest(HttpServletRequest req)
throws UnsupportedEncodingException {
if (!ServletFileUpload.isMultipartContent(req)) {
req.setCharacterEncoding("UTF-8");
}
}
private void setContentTypeOnResponse(HttpServletRequest req,
ServletResponse servletResponse) {
if (servletResponse.getContentType() != null) {
return;
}
String uri = req.getRequestURI();
if (!hasExtension(uri)) {
servletResponse.setContentType("text/html;charset=UTF-8");
return;
}
String typeFromContext = req.getSession().getServletContext()
.getMimeType(uri);
if (typeFromContext == null) {
servletResponse.setContentType("text/html;charset=UTF-8");
return;
}
servletResponse.setContentType(typeFromContext);
servletResponse.setCharacterEncoding("UTF-8");
}
private boolean hasExtension(String uri) {
return uri.matches(".+" // some stuff
+ "\\." // a literal period
+ "[^/]+" // some stuff that's not a slash
+ "$" // the end of the URI
);
}
@Override
public void destroy() {
// Nothing to tear down