|
|
@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.inerceptor;
|
|
|
import cn.reghao.dfs.store.db.repository.ObjectRepository;
|
|
|
import cn.reghao.dfs.store.model.po.FileMeta;
|
|
|
import cn.reghao.dfs.store.util.UserContext;
|
|
|
+import cn.reghao.oss.api.constant.ObjectACL;
|
|
|
import cn.reghao.tnb.account.api.dto.UserPermission;
|
|
|
import cn.reghao.tnb.account.api.iface.UserQuery;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -35,26 +36,18 @@ public class AccessLogInterceptor implements HandlerInterceptor {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
|
|
|
- throws Exception {
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
String uri = request.getRequestURI();
|
|
|
String method = request.getMethod();
|
|
|
if (method.equals("OPTIONS")) {
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
- //checkPermission(method, uri, response);
|
|
|
- String userAgent = request.getHeader("user-agent");
|
|
|
- String ipv4 = request.getRemoteAddr();
|
|
|
- String referer = request.getHeader("referer");
|
|
|
- String sign = request.getParameter("sign");
|
|
|
- log.info("{} -> {}", method, uri);
|
|
|
- return true;
|
|
|
+ return checkPermission(method, uri, response);
|
|
|
}
|
|
|
|
|
|
private boolean checkPermission(String method, String uri, HttpServletResponse response) {
|
|
|
long userId = UserContext.getUser();
|
|
|
- UserPermission userPermission = userQuery.getUserPermission(userId);
|
|
|
+ //UserPermission userPermission = userQuery.getUserPermission(userId);
|
|
|
if (method.equals("GET") || method.equals("HEAD")) {
|
|
|
String objectName = URLDecoder.decode(uri, StandardCharsets.UTF_8).replaceFirst("/", "");
|
|
|
FileMeta fileMeta = objectRepository.getByObjectName(objectName);
|
|
|
@@ -63,11 +56,19 @@ public class AccessLogInterceptor implements HandlerInterceptor {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- boolean diskFile = fileMeta.getDiskFile();
|
|
|
+ long uploadBy = fileMeta.getUploadBy();
|
|
|
+ if (userId == uploadBy) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
int acl = fileMeta.getAcl();
|
|
|
- if (acl == 1) {
|
|
|
+ if (acl == ObjectACL.PRIVATE.getCode()) {
|
|
|
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
|
|
|
return false;
|
|
|
+ } else if (acl == ObjectACL.PUBLIC.getCode()) {
|
|
|
+ return true;
|
|
|
+ } else if (acl == ObjectACL.FRIEND.getCode()) {
|
|
|
+ return userQuery.isFriend(userId, uploadBy);
|
|
|
}
|
|
|
} else if (method.equals("PUT") || method.equals("POST")) {
|
|
|
if (userId == -1) {
|
|
|
@@ -82,11 +83,26 @@ public class AccessLogInterceptor implements HandlerInterceptor {
|
|
|
@Override
|
|
|
public void postHandle(HttpServletRequest request, HttpServletResponse response,
|
|
|
Object handler, @Nullable ModelAndView modelAndView) throws Exception {
|
|
|
-
|
|
|
+ String uri = request.getRequestURI();
|
|
|
+ String method = request.getMethod();
|
|
|
+ int statusCode = response.getStatus();
|
|
|
+ String userAgent = request.getHeader("user-agent");
|
|
|
+ String ipv4 = request.getRemoteAddr();
|
|
|
+ String referer = request.getHeader("referer");
|
|
|
+ String sign = request.getParameter("sign");
|
|
|
+ log.info("{}", statusCode);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
|
|
|
Object handler, @Nullable Exception ex) throws Exception {
|
|
|
+ String uri = request.getRequestURI();
|
|
|
+ String method = request.getMethod();
|
|
|
+ int statusCode = response.getStatus();
|
|
|
+ String userAgent = request.getHeader("user-agent");
|
|
|
+ String ipv4 = request.getRemoteAddr();
|
|
|
+ String referer = request.getHeader("referer");
|
|
|
+ String sign = request.getParameter("sign");
|
|
|
+ log.info("{} {} -> {} {}", statusCode, method, uri, userAgent);
|
|
|
}
|
|
|
}
|