feat: 提交项目代码
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
package com.adc.da.base.entity;
|
||||
|
||||
public class BaseEntity {
|
||||
public BaseEntity() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package com.adc.da.base.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class TreeEntity<T extends TreeEntity> extends BaseEntity {
|
||||
protected String id;
|
||||
protected String name;
|
||||
protected String parentId;
|
||||
protected String parentIds;
|
||||
protected T parent;
|
||||
protected List<T> childList;
|
||||
protected Integer delFlag;
|
||||
|
||||
public TreeEntity() {
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getParentId() {
|
||||
return this.parentId;
|
||||
}
|
||||
|
||||
public void setParentId(String parentId) {
|
||||
this.parentId = parentId;
|
||||
}
|
||||
|
||||
public String getParentIds() {
|
||||
return this.parentIds;
|
||||
}
|
||||
|
||||
public void setParentIds(String parentIds) {
|
||||
this.parentIds = parentIds;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<T> getChildList() {
|
||||
return this.childList;
|
||||
}
|
||||
|
||||
public void setChildList(List<T> childList) {
|
||||
this.childList = childList;
|
||||
}
|
||||
|
||||
public T getParent() {
|
||||
return this.parent;
|
||||
}
|
||||
|
||||
public void setParent(T parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public Integer getDelFlag() {
|
||||
return this.delFlag;
|
||||
}
|
||||
|
||||
public void setDelFlag(Integer delFlag) {
|
||||
this.delFlag = delFlag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.adc.da.base.page;
|
||||
|
||||
public class BasePage {
|
||||
private Integer page = 1;
|
||||
private Integer pageSize = 20;
|
||||
private Integer startIndex;
|
||||
private Integer endIndex;
|
||||
private String orderBy;
|
||||
private String order;
|
||||
private String q;
|
||||
private Pager pager = new Pager();
|
||||
|
||||
public BasePage() {
|
||||
}
|
||||
|
||||
public Pager getPager() {
|
||||
this.pager.setPageId(this.getPage());
|
||||
this.pager.setPageSize(this.getPageSize());
|
||||
String orderField = "";
|
||||
if (this.orderBy != null && this.orderBy.trim().length() > 0) {
|
||||
orderField = this.orderBy;
|
||||
}
|
||||
|
||||
if (orderField.trim().length() > 0 && this.order != null && this.order.trim().length() > 0) {
|
||||
orderField = orderField + " " + this.order;
|
||||
}
|
||||
|
||||
this.pager.setOrderField(orderField);
|
||||
return this.pager;
|
||||
}
|
||||
|
||||
public void setPager(Pager pager) {
|
||||
this.pager = pager;
|
||||
}
|
||||
|
||||
public Integer getPage() {
|
||||
return this.page;
|
||||
}
|
||||
|
||||
public void setPage(Integer page) {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
public Integer getPageSize() {
|
||||
return this.pageSize;
|
||||
}
|
||||
|
||||
public void setPageSize(Integer pageSize) {
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
public String getOrderBy() {
|
||||
return this.orderBy;
|
||||
}
|
||||
|
||||
public void setOrderBy(String orderBy) {
|
||||
this.orderBy = orderBy;
|
||||
}
|
||||
|
||||
public String getOrder() {
|
||||
return this.order;
|
||||
}
|
||||
|
||||
public void setOrder(String order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public String getQ() {
|
||||
return this.q;
|
||||
}
|
||||
|
||||
public void setQ(String q) {
|
||||
this.q = q;
|
||||
}
|
||||
|
||||
public Integer getStartIndex() {
|
||||
return this.startIndex;
|
||||
}
|
||||
|
||||
public void setStartIndex(Integer startIndex) {
|
||||
this.startIndex = (this.page - 1) * this.pageSize + 1;
|
||||
}
|
||||
|
||||
public Integer getEndIndex() {
|
||||
return this.endIndex;
|
||||
}
|
||||
|
||||
public void setEndIndex(Integer endIndex) {
|
||||
this.endIndex = this.page * this.pageSize;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
package com.adc.da.base.page;
|
||||
|
||||
public class Pager {
|
||||
|
||||
private int pageId = 1;
|
||||
private int rowCount = 0;
|
||||
private int pageSize = 10;
|
||||
private int pageCount = 0;
|
||||
private int pageOffset = 0;
|
||||
private int pageTail = 0;
|
||||
private String orderField;
|
||||
private boolean orderDirection = true;
|
||||
private boolean pageEnabled = true;
|
||||
private int length = 6;
|
||||
private int startIndex = 0;
|
||||
private int endIndex = 0;
|
||||
private int[] indexs;
|
||||
|
||||
public Pager() {
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return this.length;
|
||||
}
|
||||
|
||||
public void setLength(int length) {
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
public int[] getIndexs() {
|
||||
int len = this.getEndIndex() - this.getStartIndex() + 1;
|
||||
this.indexs = new int[len];
|
||||
|
||||
for(int i = 0; i < len; ++i) {
|
||||
this.indexs[i] = this.getStartIndex() + i;
|
||||
}
|
||||
|
||||
return this.indexs;
|
||||
}
|
||||
|
||||
public void setIndexs(int[] indexs) {
|
||||
this.indexs = indexs;
|
||||
}
|
||||
|
||||
public int getStartIndex() {
|
||||
this.startIndex = (this.pageId - 1) * this.pageSize + 1;
|
||||
return this.startIndex;
|
||||
}
|
||||
|
||||
public void setStartIndex(int startIndex) {
|
||||
System.out.println("startIndx:" + this.pageId + ":" + this.pageSize);
|
||||
this.startIndex = (this.pageId - 1) * this.pageSize + 1;
|
||||
}
|
||||
|
||||
public int getEndIndex() {
|
||||
this.endIndex = this.pageId * this.pageSize;
|
||||
return this.endIndex;
|
||||
}
|
||||
|
||||
public void setEndIndex(int endIndex) {
|
||||
this.endIndex = this.pageId * this.pageSize;
|
||||
}
|
||||
|
||||
protected void doPage() {
|
||||
this.pageCount = this.rowCount / this.pageSize + 1;
|
||||
if (this.rowCount % this.pageSize == 0 && this.pageCount > 1) {
|
||||
--this.pageCount;
|
||||
}
|
||||
|
||||
this.pageOffset = (this.pageId - 1) * this.pageSize;
|
||||
this.pageTail = this.pageOffset + this.pageSize;
|
||||
if (this.pageOffset + this.pageSize > this.rowCount) {
|
||||
this.pageTail = this.rowCount;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public String getOrderCondition() {
|
||||
String condition = "";
|
||||
if (this.orderField != null && this.orderField.length() != 0) {
|
||||
condition = " order by " + this.orderField + (this.orderDirection ? " " : " desc ");
|
||||
}
|
||||
|
||||
return condition;
|
||||
}
|
||||
|
||||
public String getMysqlQueryCondition() {
|
||||
String condition = "";
|
||||
if (this.pageEnabled) {
|
||||
}
|
||||
|
||||
return condition;
|
||||
}
|
||||
|
||||
public void setOrderDirection(boolean orderDirection) {
|
||||
this.orderDirection = orderDirection;
|
||||
}
|
||||
|
||||
public boolean isOrderDirection() {
|
||||
return this.orderDirection;
|
||||
}
|
||||
|
||||
public void setOrderField(String orderField) {
|
||||
this.orderField = orderField;
|
||||
}
|
||||
|
||||
public String getOrderField() {
|
||||
return this.orderField;
|
||||
}
|
||||
|
||||
public void setPageCount(int pageCount) {
|
||||
this.pageCount = pageCount;
|
||||
}
|
||||
|
||||
public int getPageCount() {
|
||||
return this.pageCount;
|
||||
}
|
||||
|
||||
public void setPageId(int pageId) {
|
||||
this.pageId = pageId;
|
||||
}
|
||||
|
||||
public int getPageId() {
|
||||
return this.pageId;
|
||||
}
|
||||
|
||||
public void setPageOffset(int pageOffset) {
|
||||
this.pageOffset = pageOffset;
|
||||
}
|
||||
|
||||
public int getPageOffset() {
|
||||
return this.pageOffset;
|
||||
}
|
||||
|
||||
public void setPageSize(int pageSize) {
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
public int getPageSize() {
|
||||
return this.pageSize;
|
||||
}
|
||||
|
||||
public void setPageTail(int pageTail) {
|
||||
this.pageTail = pageTail;
|
||||
}
|
||||
|
||||
public int getPageTail() {
|
||||
return this.pageTail;
|
||||
}
|
||||
|
||||
public void setRowCount(int rowCount) {
|
||||
this.rowCount = rowCount;
|
||||
this.doPage();
|
||||
}
|
||||
|
||||
public int getRowCount() {
|
||||
return this.rowCount;
|
||||
}
|
||||
|
||||
public boolean isPageEnabled() {
|
||||
return this.pageEnabled;
|
||||
}
|
||||
|
||||
public void setPageEnabled(boolean pageEnabled) {
|
||||
this.pageEnabled = pageEnabled;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.adc.da.base.web;
|
||||
|
||||
import com.adc.da.base.page.Pager;
|
||||
import com.adc.da.http.PageInfo;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class BaseController<T> {
|
||||
private static final String DATA = "data";
|
||||
private static final String TOTAL = "total";
|
||||
|
||||
protected BaseController() {
|
||||
}
|
||||
|
||||
public PageInfo<T> getPageInfo(Pager pager, List<T> rows) {
|
||||
PageInfo<T> pageInfo = new PageInfo();
|
||||
pageInfo.setList(rows);
|
||||
pageInfo.setCount((long)pager.getRowCount());
|
||||
pageInfo.setPageSize(pager.getPageSize());
|
||||
pageInfo.setPageCount((long)pager.getPageCount());
|
||||
pageInfo.setPageNo(pager.getPageId());
|
||||
return pageInfo;
|
||||
}
|
||||
|
||||
public static Map<String, Object> getGridData(int total, List<?> rows) {
|
||||
Map<String, Object> response = new HashMap();
|
||||
response.put("total", total);
|
||||
response.put("data", rows);
|
||||
return response;
|
||||
}
|
||||
|
||||
public static Map<String, Object> getData(Object data) {
|
||||
Map<String, Object> response = new HashMap();
|
||||
response.put("data", data);
|
||||
return response;
|
||||
}
|
||||
|
||||
public static void download(HttpServletResponse response, File file) throws IOException {
|
||||
download(response, file, file.getName());
|
||||
}
|
||||
|
||||
public static void download(HttpServletResponse response, File file, String fileName) throws IOException {
|
||||
FileInputStream in = new FileInputStream(file);
|
||||
Throwable var4 = null;
|
||||
|
||||
try {
|
||||
download(response, (InputStream)in, fileName);
|
||||
} catch (Throwable var13) {
|
||||
var4 = var13;
|
||||
throw var13;
|
||||
} finally {
|
||||
if (in != null) {
|
||||
if (var4 != null) {
|
||||
try {
|
||||
in.close();
|
||||
} catch (Throwable var12) {
|
||||
var4.addSuppressed(var12);
|
||||
}
|
||||
} else {
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void download(HttpServletResponse response, InputStream in, String fileName) throws IOException {
|
||||
response.setContentType("application/x-msdownload;");
|
||||
response.addHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.adc.da.exception;
|
||||
|
||||
public class AdcDaBaseException extends RuntimeException {
|
||||
private String errorCode;
|
||||
|
||||
public AdcDaBaseException() {
|
||||
}
|
||||
|
||||
public AdcDaBaseException(String message) {
|
||||
this("-1", message);
|
||||
}
|
||||
|
||||
public AdcDaBaseException(String errorCode, String message) {
|
||||
super(message);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public String getErrorCode() {
|
||||
return this.errorCode;
|
||||
}
|
||||
|
||||
public void setErrorCode(String errorCode) {
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.adc.da.file.store;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
|
||||
public interface IFileStore {
|
||||
|
||||
String storeFile(InputStream var1, String var2, String var3) throws IOException;
|
||||
|
||||
InputStream loadFile(String var1);
|
||||
|
||||
byte[] loadFileBytes(String var1);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpServletResponseWrapper;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class AddExpiresHeaderResponse extends HttpServletResponseWrapper {
|
||||
private static final String[] CACHEABLE_CONTENT_TYPES = new String[]{"text/css", "text/javascript", "application/javascript", "image/png", "image/jpeg", "image/gif", "image/jpg"};
|
||||
private long maxAge = 0L;
|
||||
|
||||
public AddExpiresHeaderResponse(HttpServletResponse response, long maxAge) {
|
||||
super(response);
|
||||
this.maxAge = maxAge;
|
||||
}
|
||||
|
||||
public void setContentType(String contentType) {
|
||||
if (contentType != null && Arrays.binarySearch(CACHEABLE_CONTENT_TYPES, contentType) > -1) {
|
||||
Calendar inTwoMonths = Calendar.getInstance();
|
||||
inTwoMonths.add(2, 2);
|
||||
super.setDateHeader("Expires", inTwoMonths.getTimeInMillis());
|
||||
super.setHeader("Cache-Control", "max-age=" + this.maxAge);
|
||||
} else {
|
||||
super.setHeader("Expires", "-1");
|
||||
super.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
|
||||
}
|
||||
|
||||
super.setContentType(contentType);
|
||||
}
|
||||
|
||||
static {
|
||||
Arrays.sort(CACHEABLE_CONTENT_TYPES);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import com.adc.da.util.FileUtil;
|
||||
import com.adc.da.util.RequestUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public class CsrfFilter implements Filter {
|
||||
private static final Log logger = LogFactory.getLog(CsrfFilter.class);
|
||||
private List<String> whiteUrls;
|
||||
private int whitelistSize = 0;
|
||||
|
||||
public CsrfFilter() {
|
||||
}
|
||||
|
||||
public void init(FilterConfig filterConfig) {
|
||||
String path = CsrfFilter.class.getResource("/").getFile();
|
||||
this.whiteUrls = FileUtil.readAsStringList(path + "white/csrfWhite.txt");
|
||||
this.whitelistSize = null == this.whiteUrls ? 0 : this.whiteUrls.size();
|
||||
}
|
||||
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
try {
|
||||
HttpServletRequest req = (HttpServletRequest)request;
|
||||
HttpServletResponse res = (HttpServletResponse)response;
|
||||
String url = req.getRequestURL().toString();
|
||||
String referurl = req.getHeader("Referer");
|
||||
if (this.isWhiteReq(referurl)) {
|
||||
chain.doFilter(request, response);
|
||||
} else {
|
||||
req.getRequestDispatcher("/").forward(req, res);
|
||||
String log = "";
|
||||
String date = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());
|
||||
String clientIp = RequestUtils.getClientIp(req);
|
||||
log = "跨站请求---->>>" + clientIp + "||" + date + "||" + referurl + "||" + url;
|
||||
logger.warn(log);
|
||||
}
|
||||
} catch (Exception var11) {
|
||||
logger.error("doFilter Exception:", var11);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private boolean isWhiteReq(String referUrl) {
|
||||
if (referUrl != null && !"".equals(referUrl) && this.whitelistSize != 0) {
|
||||
String refHost = "";
|
||||
referUrl = referUrl.toLowerCase();
|
||||
if (referUrl.startsWith("http://")) {
|
||||
refHost = referUrl.substring(7);
|
||||
} else if (referUrl.startsWith("https://")) {
|
||||
refHost = referUrl.substring(8);
|
||||
}
|
||||
Iterator iterator = this.whiteUrls.iterator();
|
||||
String urlTemp;
|
||||
do {
|
||||
if (!iterator.hasNext()) {
|
||||
return false;
|
||||
}
|
||||
urlTemp = (String)iterator.next();
|
||||
} while(refHost.indexOf(urlTemp.toLowerCase()) <= -1);
|
||||
return true;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
|
||||
import com.adc.da.util.IpUtil;
|
||||
import eu.bitwalker.useragentutils.UserAgent;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
|
||||
public class FakeJSessionIdFilter implements Filter {
|
||||
public FakeJSessionIdFilter() {
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
|
||||
HttpServletRequest request = (HttpServletRequest)req;
|
||||
String ip = (String)request.getSession().getAttribute("ip");
|
||||
String browser = (String)request.getSession().getAttribute("browser");
|
||||
UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
|
||||
String newBrowser = userAgent.getBrowser().toString();
|
||||
String newIp = IpUtil.getIpAddr(request);
|
||||
if ("0:0:0:0:0:0:0:1".equals(newIp)) {
|
||||
newIp = "127.0.0.1";
|
||||
}
|
||||
|
||||
request.getSession().setAttribute("ip", newIp);
|
||||
request.getSession().setAttribute("browser", newBrowser);
|
||||
if (ip == null || browser == null || newBrowser.equals(browser) && newIp.equals(ip)) {
|
||||
filterChain.doFilter(req, resp);
|
||||
} else {
|
||||
request.getSession().invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public void init(FilterConfig arg0) throws ServletException {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
public class HttpCacheFilter implements Filter {
|
||||
private long maxAge = 86400L;
|
||||
|
||||
public HttpCacheFilter() {
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
|
||||
HttpServletRequest request = (HttpServletRequest)req;
|
||||
HttpServletResponse response = (HttpServletResponse)resp;
|
||||
chain.doFilter(request, new AddExpiresHeaderResponse(response, this.maxAge));
|
||||
}
|
||||
|
||||
public void init(FilterConfig config) throws ServletException {
|
||||
String maxAgeStr = config.getInitParameter("maxAge");
|
||||
if (StringUtils.isNotEmpty(maxAgeStr)) {
|
||||
this.maxAge = Long.valueOf(maxAgeStr);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
public class RequestInfoFilter implements Filter {
|
||||
private static final Log logger = LogFactory.getLog(RequestInfoFilter.class);
|
||||
private static final List<String> ignoreList = new ArrayList();
|
||||
|
||||
public RequestInfoFilter() {
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
public void init(FilterConfig filterConfig) throws ServletException {
|
||||
ignoreList.add("js");
|
||||
ignoreList.add("css");
|
||||
ignoreList.add("png");
|
||||
ignoreList.add("ico");
|
||||
ignoreList.add("gif");
|
||||
ignoreList.add("jpg");
|
||||
}
|
||||
|
||||
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
|
||||
HttpServletRequest request = (HttpServletRequest)req;
|
||||
HttpServletResponse response = (HttpServletResponse)resp;
|
||||
|
||||
try {
|
||||
long startTime = System.currentTimeMillis();
|
||||
String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo());
|
||||
if (!isIgnore(uri)) {
|
||||
logger.info("==================== RequestInfoFilter Start ====================");
|
||||
logger.info(request.getMethod() + " : " + uri);
|
||||
logger.info("session存活时间:" + request.getSession().getMaxInactiveInterval());
|
||||
this.logHeaders(request);
|
||||
this.logParams(request);
|
||||
logger.info(request.getHeader("Authorization"));
|
||||
chain.doFilter(request, response);
|
||||
long endTime = System.currentTimeMillis();
|
||||
logger.info(request.getMethod() + " 耗时:" + (endTime - startTime) + " ms");
|
||||
logger.info("==================== RequestInfoFilter End ====================");
|
||||
} else {
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
} catch (Exception var11) {
|
||||
logger.error("doFilter error", var11);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void logHeaders(HttpServletRequest request) {
|
||||
Map<String, String> headerMap = new HashMap();
|
||||
Enumeration headers = request.getHeaderNames();
|
||||
|
||||
while(headers.hasMoreElements()) {
|
||||
String headName = (String)headers.nextElement();
|
||||
if (headName != null && !"".equals(headName)) {
|
||||
headerMap.put(headName, request.getHeader(headName));
|
||||
}
|
||||
}
|
||||
|
||||
headerMap.put("RemoteHost", request.getRemoteHost() + ":" + request.getRemotePort());
|
||||
logger.info(headerMap);
|
||||
}
|
||||
|
||||
private void logParams(HttpServletRequest request) {
|
||||
Map<String, String> maps = new HashMap();
|
||||
Enumeration keys = request.getParameterNames();
|
||||
|
||||
while(keys.hasMoreElements()) {
|
||||
String key = (String)keys.nextElement();
|
||||
if (StringUtils.isNotEmpty(key)) {
|
||||
String values = request.getParameter(key);
|
||||
maps.put(key, values);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(maps.toString());
|
||||
}
|
||||
|
||||
private static final boolean isIgnore(String url) {
|
||||
boolean ignore = false;
|
||||
int index = url.lastIndexOf(46);
|
||||
if (index > 0) {
|
||||
String subFix = url.substring(index + 1, url.length());
|
||||
if (ignoreList.contains(subFix)) {
|
||||
ignore = true;
|
||||
}
|
||||
}
|
||||
|
||||
return ignore;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
|
||||
public class WebFilter implements Filter {
|
||||
private static final Logger logger = LoggerFactory.getLogger(WebFilter.class);
|
||||
public WebFilter() {
|
||||
// 不做操作
|
||||
}
|
||||
|
||||
public void init(FilterConfig config) throws ServletException {
|
||||
// 不做操作
|
||||
}
|
||||
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest)request);
|
||||
chain.doFilter(xssRequest, response);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
// 不做操作
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import com.adc.da.xss.SQLFilter;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
|
||||
private static final Logger logger = LoggerFactory.getLogger(XssHttpServletRequestWrapper.class);
|
||||
HttpServletRequest orgRequest;
|
||||
private static final SQLFilter sqlFilter = new SQLFilter();
|
||||
|
||||
public XssHttpServletRequestWrapper(HttpServletRequest request) {
|
||||
super(request);
|
||||
this.orgRequest = request;
|
||||
}
|
||||
|
||||
public ServletInputStream getInputStream() throws IOException {
|
||||
String type = super.getHeader("Content-Type");
|
||||
if (StringUtils.indexOfIgnoreCase(type, "application/json") < 0) {
|
||||
return super.getInputStream();
|
||||
} else {
|
||||
String json = IOUtils.toString(super.getInputStream(), "utf-8");
|
||||
if (StringUtils.isBlank(json)) {
|
||||
return super.getInputStream();
|
||||
} else {
|
||||
json = this.xssSqlEncode(json);
|
||||
final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes("utf-8"));
|
||||
return new ServletInputStream() {
|
||||
public boolean isFinished() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isReady() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void setReadListener(ReadListener readListener) {
|
||||
// 不做操作
|
||||
}
|
||||
|
||||
public int read() throws IOException {
|
||||
return bis.read();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getParameter(String name) {
|
||||
String value = super.getParameter(this.xssSqlEncode(name));
|
||||
if (StringUtils.isNotBlank(value)) {
|
||||
value = this.xssSqlEncode(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public String[] getParameterValues(String name) {
|
||||
String[] parameters = super.getParameterValues(name);
|
||||
if (parameters != null && parameters.length != 0) {
|
||||
for(int i = 0; i < parameters.length; ++i) {
|
||||
parameters[i] = this.xssSqlEncode(parameters[i]);
|
||||
}
|
||||
|
||||
return parameters;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, String[]> getParameterMap() {
|
||||
Map<String, String[]> map = new LinkedHashMap();
|
||||
Map<String, String[]> parameters = super.getParameterMap();
|
||||
Iterator i$ = parameters.keySet().iterator();
|
||||
|
||||
while(i$.hasNext()) {
|
||||
String key = (String)i$.next();
|
||||
String[] values = (String[])parameters.get(key);
|
||||
|
||||
for(int i = 0; i < values.length; ++i) {
|
||||
values[i] = this.xssSqlEncode(values[i]);
|
||||
}
|
||||
|
||||
map.put(key, values);
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
public String getHeader(String name) {
|
||||
String value = super.getHeader(this.xssSqlEncode(name));
|
||||
if (StringUtils.isNotBlank(value)) {
|
||||
value = this.xssSqlEncode(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private String xssSqlEncode(String input) {
|
||||
String htmlOutput = XssShieldUtil.stripXss(input);
|
||||
// SQLFilter var10000 = sqlFilter;
|
||||
return SQLFilter.sqlInject(htmlOutput);
|
||||
}
|
||||
|
||||
public HttpServletRequest getOrgRequest() {
|
||||
return this.orgRequest;
|
||||
}
|
||||
|
||||
public static HttpServletRequest getOrgRequest(HttpServletRequest request) {
|
||||
return request instanceof XssHttpServletRequestWrapper ? ((XssHttpServletRequestWrapper)request).getOrgRequest() : request;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.adc.da.filter;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class XssShieldUtil {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(XssShieldUtil.class);
|
||||
private static List<Pattern> patterns = null;
|
||||
|
||||
private XssShieldUtil(){
|
||||
super();
|
||||
}
|
||||
|
||||
|
||||
private static List<Object[]> getXssPatternList()
|
||||
{
|
||||
List<Object[]> ret = new ArrayList();
|
||||
|
||||
ret.add(new Object[] { "<(no)?script[^>]*>.*?</(no)?script>", Integer.valueOf(2) });
|
||||
ret.add(new Object[] { "eval\\((.*?)\\)", Integer.valueOf(42) });
|
||||
ret.add(new Object[] { "expression\\((.*?)\\)", Integer.valueOf(42) });
|
||||
ret.add(new Object[] { "(javascript:|vbscript:|view-source:)*", Integer.valueOf(2) });
|
||||
// ret.add(new Object[] { "<(\"[^\"]*\"|'[^']*'|[^'\">])*>", Integer.valueOf(42) });
|
||||
ret.add(new Object[] { "(window\\.location|window\\.|\\.location|document\\.cookie|document\\.|alert\\(.*?\\)|window\\.open\\()*", Integer.valueOf(42) });
|
||||
ret.add(new Object[] { "<+\\s*\\w*\\s*(oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror=|onerroupdate|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmousout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onabort|onactivate|onafterprint|onafterupdate|onbefore|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizend|onresizestart|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|onunload)+\\s*=+", Integer.valueOf(42) });
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static List<Pattern> getPatterns()
|
||||
{
|
||||
if (patterns == null)
|
||||
{
|
||||
List<Pattern> list = new ArrayList();
|
||||
|
||||
String regex = null;
|
||||
Integer flag = null;
|
||||
int arrLength = 0;
|
||||
int i;
|
||||
Iterator localIterator = getXssPatternList().iterator();
|
||||
while (localIterator.hasNext()){
|
||||
Object[] arr = (Object[])localIterator.next();
|
||||
if(arr.length==0){
|
||||
continue;
|
||||
}
|
||||
regex = (String)arr[0];
|
||||
flag = (Integer)arr[1];
|
||||
list.add(Pattern.compile(regex, flag.intValue()));
|
||||
}
|
||||
/* for (Iterator localIterator = getXssPatternList().iterator(); localIterator.hasNext();i < arrLength) {
|
||||
Object[] arr = (Object[])localIterator.next();
|
||||
arrLength = arr.length;
|
||||
i = 0;
|
||||
continue;
|
||||
regex = (String)arr[0];
|
||||
flag = (Integer)arr[1];
|
||||
list.add(Pattern.compile(regex, flag.intValue()));
|
||||
i++;
|
||||
}*/
|
||||
patterns = list;
|
||||
}
|
||||
return patterns;
|
||||
}
|
||||
|
||||
public static String stripXss(String value)
|
||||
{
|
||||
if (StringUtils.isNotBlank(value))
|
||||
{
|
||||
Matcher matcher = null;
|
||||
for (Pattern pattern : getPatterns())
|
||||
{
|
||||
matcher = pattern.matcher(value);
|
||||
if (matcher.find()) {
|
||||
value = matcher.replaceAll("");
|
||||
}
|
||||
}
|
||||
// value = value.replaceAll("<", "<").replaceAll(">", ">");
|
||||
|
||||
String[] pattern = { "%", " select ", " insert ", " delete ", " from ",
|
||||
"count\\(", "drop table", " update ", " truncate ", "asc\\(",
|
||||
"mid\\(", "char\\(", "xp_cmdshell", " exec ", " master ",
|
||||
"netlocalgroup administrators", "net user", " or ", " and " };
|
||||
for (int i = 0; i < pattern.length; i++) {
|
||||
value = value.replaceAll(pattern[i],"");
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.adc.da.xss;
|
||||
|
||||
import com.adc.da.exception.AdcDaBaseException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class SQLFilter {
|
||||
|
||||
|
||||
public static String sqlInject(String str) {
|
||||
if (StringUtils.isBlank(str)) {
|
||||
return null;
|
||||
} else {
|
||||
String checkStr= str;
|
||||
checkStr = StringUtils.replace(checkStr, "\\", "");
|
||||
checkStr = checkStr.toLowerCase();
|
||||
String[] keywords = new String[]{"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"};
|
||||
String[] arr$ = keywords;
|
||||
int len$ = keywords.length;
|
||||
|
||||
for(int i$ = 0; i$ < len$; ++i$) {
|
||||
String keyword = arr$[i$];
|
||||
if (checkStr.indexOf(keyword) != -1) {
|
||||
throw new AdcDaBaseException("包含非法字符");
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user