Browse Source

浏览记录拦截器

1018653686@qq.com 1 year ago
parent
commit
f7291a704b
1 changed files with 86 additions and 87 deletions
  1. 86 87
      hx-xmhjc/src/main/java/com/fjhx/xmhjc/filter/BrowsingFilter.java

+ 86 - 87
hx-xmhjc/src/main/java/com/fjhx/xmhjc/filter/BrowsingFilter.java

@@ -1,87 +1,86 @@
-//package com.fjhx.xmhjc.filter;
-//
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.StrUtil;
-//import cn.hutool.extra.spring.SpringUtil;
-//import com.fjhx.xmhjc.utils.NetUtils;
-//import com.ruoyi.common.core.redis.RedisCache;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.AntPathMatcher;
-//import org.springframework.util.PathMatcher;
-//
-//import javax.servlet.*;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.util.concurrent.TimeUnit;
-//
-///**
-// * 浏览记录过滤器
-// * @author hj
-// * @date 2024年03月12日 9:47
-// */
-//@Component
-//public class BrowsingFilter implements Filter {
-//    private static final RedisCache redisCache = SpringUtil.getBean(RedisCache.class);
-//
-//    private static final String[] FILTER_URL = {"/open/**"};
-//
-//
-//
-//
-//    @Override
-//    public void init(FilterConfig filterConfig) throws ServletException {
-//        Filter.super.init(filterConfig);
-//    }
-//
-//    @Override
-//    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-//        HttpServletRequest request = (HttpServletRequest) servletRequest;
-//        HttpServletResponse response = (HttpServletResponse) servletResponse;
-//        String requestUrl = request.getRequestURI();
-//
-//        PathMatcher matcher = new AntPathMatcher();
-//        boolean match = false;
-//        for(String url : FILTER_URL){
-//            match = matcher.match(url, requestUrl);
-//            if (match){
-//                break;
-//            }
-//        }
-//        //在过滤范围内记录浏览记录
-//        if (match){
-//            String ip = NetUtils.getIpAddress(request);
-//            String key = "browsing:" + ip + ":" + DateUtil.today();
-//            //判断redis中是否存在key,存在则不记录
-//            if(validRedisKey(key)){
-//                filterChain.doFilter(servletRequest, servletResponse);
-//                return;
-//            }
-//            //不存在则记录
-//            redisCache.setCacheObject(key, key, 1, TimeUnit.DAYS);
-//            //TODO 记录浏览记录入库
-//            filterChain.doFilter(servletRequest, servletResponse);
-//        } else {
-//            filterChain.doFilter(servletRequest, servletResponse);
-//        }
-//    }
-//
-//    @Override
-//    public void destroy() {
-//        Filter.super.destroy();
-//    }
-//
-//
-//    /**
-//     * 判断redis中是否存在key
-//     * @param key
-//     * @return true 存在 false 不存在
-//     */
-//    private synchronized boolean validRedisKey(String key){
-//        String cacheObject = redisCache.getCacheObject(key);
-//        if(StrUtil.isNotBlank(cacheObject)){
-//            return true;
-//        }
-//        return false;
-//    }
-//}
+package com.fjhx.xmhjc.filter;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.fjhx.xmhjc.utils.NetUtils;
+import com.ruoyi.common.core.redis.RedisCache;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.util.PathMatcher;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 浏览记录过滤器
+ * @author hj
+ * @date 2024年03月12日 9:47
+ */
+@Component
+public class BrowsingFilter implements Filter {
+    private static final RedisCache redisCache = SpringUtil.getBean(RedisCache.class);
+
+    private static final String[] FILTER_URL = {"/open/**"};
+
+
+
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        Filter.super.init(filterConfig);
+    }
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        String requestUrl = request.getRequestURI();
+
+        PathMatcher matcher = new AntPathMatcher();
+        boolean match = false;
+
+        filterChain.doFilter(servletRequest, servletResponse);
+        for(String url : FILTER_URL){
+            match = matcher.match(url, requestUrl);
+            if (match){
+                String ip = NetUtils.getIpAddress(request);
+                String key = "browsing:" + ip + "#" + DateUtil.today();
+                //判断redis中是否存在key,存在则不记录
+                if(validRedisKey(key)){
+                    filterChain.doFilter(servletRequest, servletResponse);
+                    return;
+                }
+                //TODO 记录浏览记录入库
+
+
+                break;
+            }
+        }
+    }
+
+    @Override
+    public void destroy() {
+        Filter.super.destroy();
+    }
+
+
+    /**
+     * 判断redis中是否存在key
+     * @param key
+     * @return true 存在 false 不存在
+     */
+    private synchronized boolean validRedisKey(String key){
+        String cacheObject = redisCache.getCacheObject(key);
+        if(StrUtil.isNotBlank(cacheObject)){
+            return true;
+        }
+        //不存在则记录
+        redisCache.setCacheObject(key, key, 1, TimeUnit.DAYS);
+        return false;
+    }
+}