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() {
|
|
}
|
}
|