前言
2018.10有个线上项目要用在线预览功能,运维同事推荐了kkFileview,但公司线上预览是用域名https访问,所以在12月改动了代码,刚好最近有空写篇博客,供需要的参考。
1. 解决跨域(线上项目是另一个域名,访问kkFileview会出现跨域问题):
@Component
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedHeaders("*")
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
2. 过滤器设置全局属性,在此request作用域内有效。思路:判断请求地址是不是以.com结尾,是则为https域名访问,进行拼接操作,然后写入全局属性。
@Slf4j
public class ChinesePathFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
StringBuilder pathBuilder = new StringBuilder();
String requestUrl = ((HttpServletRequest)request).getRequestURL().toString();
boolean b = true;
if (requestUrl.contains(".com")) {
//域名
pathBuilder.append("https").append("://").append(request.getServerName())
//.append(":").append(request.getServerPort())
.append(((HttpServletRequest)request).getContextPath()).append("/");
} else {
//本机或ip访问
b = false;
requestUrl = requestUrl.substring(0, requestUrl.lastIndexOf("/"))+"/";
}
log.info("baseUrl地址:" + pathBuilder.toString());
log.info("requestUrl:" + requestUrl);
request.setAttribute("baseUrl", b ? pathBuilder.toString() : requestUrl);
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
3. cn.keking.utils.FileUtils#doActionConvertedFile 方法中http改成https
4. index.ftl 文件下http全改为https
5. pdf.ftl 改动如下:
部署后,就可以兼容ip访问以及https访问了,其它的日志代码就不贴了,以及https下载zip文件等等。