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:
parent
afde710d9a
commit
12ccf8ed9e
1 changed files with 42 additions and 15 deletions
|
@ -3,11 +3,11 @@
|
||||||
package edu.cornell.mannlib.vitro.webapp.filters;
|
package edu.cornell.mannlib.vitro.webapp.filters;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
import javax.servlet.FilterChain;
|
import javax.servlet.FilterChain;
|
||||||
import javax.servlet.FilterConfig;
|
import javax.servlet.FilterConfig;
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
|
@ -16,6 +16,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
||||||
|
|
||||||
public class CharsetEncodingFilter implements Filter {
|
public class CharsetEncodingFilter implements Filter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(FilterConfig filterConfig) throws ServletException {
|
public void init(FilterConfig filterConfig) throws ServletException {
|
||||||
// Nothing to set up
|
// Nothing to set up
|
||||||
|
@ -26,25 +27,51 @@ public class CharsetEncodingFilter implements Filter {
|
||||||
ServletResponse servletResponse, FilterChain filterChain)
|
ServletResponse servletResponse, FilterChain filterChain)
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
HttpServletRequest req = (HttpServletRequest) servletRequest;
|
HttpServletRequest req = (HttpServletRequest) servletRequest;
|
||||||
ServletContext ctx = req.getSession().getServletContext();
|
|
||||||
String url = req.getRequestURL().toString();
|
|
||||||
|
|
||||||
if (!ServletFileUpload.isMultipartContent(req)) {
|
setCharacterEncodingOnRequest(req);
|
||||||
servletRequest.setCharacterEncoding("UTF-8");
|
setContentTypeOnResponse(req, servletResponse);
|
||||||
}
|
|
||||||
|
|
||||||
if (req.getContentType() == null) {
|
|
||||||
String typeFromContext = ctx.getMimeType(url);
|
|
||||||
if (typeFromContext == null) {
|
|
||||||
servletResponse.setContentType("text/html;charset=UTF-8");
|
|
||||||
} else {
|
|
||||||
servletResponse.setContentType(typeFromContext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filterChain.doFilter(servletRequest, 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
|
@Override
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
// Nothing to tear down
|
// Nothing to tear down
|
||||||
|
|
Loading…
Add table
Reference in a new issue