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 requestUrl.contains("/sms/send-code") || // requestUrl.contains("/sms/login")|| // requestUrl.contains("/config-security/enable-list-all") // ); } @Override public void destroy() { } }