cloudroam
2025-03-13 d2f062b46a96a2083864d529aff28628eea26b58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.jsh.erp.filter;
 
import com.jsh.erp.service.redis.RedisService;
import org.springframework.util.StringUtils;
 
import javax.annotation.Resource;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
@WebFilter(filterName = "LogCostFilter", urlPatterns = {"/*"},
        initParams = {@WebInitParam(name = "filterPath",
                      value = "/jshERP-boot/user/login#/jshERP-boot/user/weixinLogin#/jshERP-boot/user/weixinBind#" +
                              "/jshERP-boot/user/registerUser#/jshERP-boot/user/randomImage#" +
                              "/jshERP-boot/platformConfig/getPlatform#/jshERP-boot/v2/api-docs#/jshERP-boot/webjars#" +
                              "/jshERP-boot/systemConfig/static#/jshERP-boot/api/plugin/wechat/weChat/share#" +
                              "/jshERP-boot/api/plugin/general-ledger/pdf/voucher#/jshERP-boot/api/plugin/tenant-statistics/tenantClean#" +
                              "/jshERP-boot/swagger-ui.html#/jshERP-boot/swagger-resources#" +
                              "/jshERP-boot/doc.html#/jshERP-boot/swagger-resources/**#" +
                              "/jshERP-boot/v2/api-docs/**#/jshERP-boot/webjars/**")})
public class LogCostFilter implements Filter {
 
    private static final String FILTER_PATH = "filterPath";
 
    private String[] allowUrls;
    @Resource
    private RedisService redisService;
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String filterPath = filterConfig.getInitParameter(FILTER_PATH);
        if (!StringUtils.isEmpty(filterPath)) {
            allowUrls = filterPath.contains("#") ? filterPath.split("#") : new String[]{filterPath};
        }
    }
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletRequest servletRequest = (HttpServletRequest) request;
        HttpServletResponse servletResponse = (HttpServletResponse) response;
        String requestUrl = servletRequest.getRequestURI();
 
        if (isSwaggerRequest(requestUrl)) {
            chain.doFilter(request, response);
            return;
        }
 
        if (requestUrl != null && (
            requestUrl.contains("/doc.html") ||
            requestUrl.contains("/swagger-ui.html") ||
            requestUrl.contains("/swagger-resources") ||
            requestUrl.contains("/v2/api-docs") ||
            requestUrl.contains("/webjars/") ||
            requestUrl.contains("/user/login") || 
            requestUrl.contains("/user/register"))) {
            chain.doFilter(request, response);
            return;
        }
 
        Object userId = redisService.getObjectFromSessionByKey(servletRequest,"userId");
        if(userId!=null) { //如果已登录,不阻止
            chain.doFilter(request, response);
            return;
        }
        if (null != allowUrls && allowUrls.length > 0) {
            for (String url : allowUrls) {
                if (requestUrl.startsWith(url)) {
                    chain.doFilter(request, response);
                    return;
                }
            }
        }
        servletResponse.setStatus(500);
        if(requestUrl != null && !requestUrl.contains("/user/logout") && !requestUrl.contains("/function/findMenuByPNumber")) {
            servletResponse.getWriter().write("loginOut");
        }
    }
    private boolean isSwaggerRequest(String requestUrl) {
        return requestUrl != null && (
                requestUrl.contains("/doc.html") ||
                        requestUrl.contains("/swagger-ui.html") ||
                        requestUrl.contains("/swagger-resources") ||
                        requestUrl.contains("/v2/api-docs") ||
                        requestUrl.contains("/webjars/") ||
                        requestUrl.contains("/user/login") ||
                        requestUrl.contains("/user/register") ||
                        // 添加API尝试请求
                        requestUrl.contains("/cloudContent/getByType") ||  // 允许未登录访问的API
                        requestUrl.contains("/cloudContent/list")  ||         // 允许未登录访问的API
                        requestUrl.contains("/sysDict/getByDictCodeAndItemText")  //允许查询字典值API
        );
    }
 
    @Override
    public void destroy() {
 
    }
}