001
014
015 package com.liferay.portal.sharepoint;
016
017 import com.liferay.portal.kernel.servlet.HttpHeaders;
018 import com.liferay.portal.kernel.servlet.HttpMethods;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.servlet.filters.secure.SecureFilter;
021
022 import javax.servlet.FilterChain;
023 import javax.servlet.FilterConfig;
024 import javax.servlet.http.HttpServletRequest;
025 import javax.servlet.http.HttpServletResponse;
026
027
031 public class SharepointFilter extends SecureFilter {
032
033 @Override
034 public void init(FilterConfig filterConfig) {
035 super.init(filterConfig);
036
037 setUsePermissionChecker(true);
038 }
039
040 protected boolean isSharepointRequest(String uri) {
041 if (uri == null) {
042 return false;
043 }
044
045 if (uri.endsWith("*.asmx")) {
046 return true;
047 }
048
049 for (String prefix : _PREFIXES) {
050 if (uri.startsWith(prefix)) {
051 return true;
052 }
053 }
054
055 return false;
056 }
057
058 @Override
059 protected void processFilter(
060 HttpServletRequest request, HttpServletResponse response,
061 FilterChain filterChain)
062 throws Exception {
063
064 String method = request.getMethod();
065
066 String userAgent = GetterUtil.getString(
067 request.getHeader(HttpHeaders.USER_AGENT));
068
069 if ((userAgent.startsWith(
070 "Microsoft Data Access Internet Publishing") ||
071 userAgent.startsWith("Microsoft Office Protocol Discovery")) &&
072 method.equals(HttpMethods.OPTIONS)) {
073
074 setOptionsHeaders(response);
075
076 return;
077 }
078
079 if (!isSharepointRequest(request.getRequestURI())) {
080 processFilter(
081 SharepointFilter.class, request, response, filterChain);
082
083 return;
084 }
085
086 if (method.equals(HttpMethods.GET) || method.equals(HttpMethods.HEAD)) {
087 setGetHeaders(response);
088 }
089 else if (method.equals(HttpMethods.POST)) {
090 setPostHeaders(response);
091 }
092
093 super.processFilter(request, response, filterChain);
094 }
095
096 protected void setGetHeaders(HttpServletResponse response) {
097 response.setContentType("text/html");
098
099 response.setHeader(
100 "Public-Extension", "http:
101 response.setHeader(
102 "MicrosoftSharePointTeamServices", SharepointUtil.VERSION);
103 response.setHeader("Cache-Control", "no-cache");
104 }
105
106 protected void setOptionsHeaders(HttpServletResponse response) {
107 response.setHeader("MS-Author-Via", "MS-FP/4.0,DAV");
108 response.setHeader("MicrosoftOfficeWebServer", "5.0_Collab");
109 response.setHeader(
110 "MicrosoftSharePointTeamServices", SharepointUtil.VERSION);
111 response.setHeader("DAV", "1,2");
112 response.setHeader("Accept-Ranges", "none");
113 response.setHeader("Cache-Control", "no-cache");
114 response.setHeader(
115 "Allow",
116 "COPY, DELETE, GET, GETLIB, HEAD, LOCK, MKCOL, MOVE, OPTIONS, " +
117 "POST, PROPFIND, PROPPATCH, PUT, UNLOCK");
118 }
119
120 protected void setPostHeaders(HttpServletResponse response) {
121 response.setContentType("application/x-vermeer-rpc");
122
123 response.setHeader(
124 "MicrosoftSharePointTeamServices", SharepointUtil.VERSION);
125 response.setHeader("Cache-Control", "no-cache");
126 response.setHeader("Connection", "close");
127 }
128
129 private static final String[] _PREFIXES =
130 new String[] {
131 "/_vti_inf.html", "/_vti_bin", "/sharepoint", "/history",
132 "/resources"};
133
134 }