📄 systemfileaction.java
字号:
package cn.jsprun.struts.action;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import cn.jsprun.service.system.CheckFile;
import cn.jsprun.utils.Common;
import cn.jsprun.utils.Md5Token;
import cn.jsprun.vo.logs.FilesVo;
public class SystemFileAction extends DispatchAction {
public ActionForward checkFileperms(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
CheckFile chekfile = new CheckFile();
String path = servlet.getServletContext().getRealPath("/");
String filepath1 = path+ "forumdata/cache";
String filepath2 = path+ "forumdata/logs";
String filepath3 = path+ "forumdata/templates";
String filepath4 = path+ "templates";
List<String> fallfile = new ArrayList<String>();
fallfile = chekfile.checkFilePopedom(filepath1, fallfile,path);
fallfile = chekfile.checkFilePopedom(filepath2, fallfile,path);
fallfile = chekfile.checkFilePopedom(filepath3, fallfile,path);
fallfile = chekfile.checkFilePopedom(filepath4, fallfile,path);
request.setAttribute("fallfilelist", fallfile);
if (fallfile == null || fallfile.size() == 0) {
request.setAttribute("fallfilelist", null);
}
return mapping.findForward("fileperms");
}
@SuppressWarnings({ "deprecation", "unchecked" })
public ActionForward checkFileIntegrity(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) {
HttpSession session = request.getSession();
boolean isfounder = (Boolean)session.getAttribute("isfounder");
boolean ishavefounder = (Boolean)session.getAttribute("ishavefounder");
if(ishavefounder && !isfounder){
request.setAttribute("resultInfo", "您没有权限访问该设置,出于安全考虑此设置只有论坛创始人可以使用。");
return mapping.findForward("result");
}
String filechek = request.getParameter("filechek");
if(filechek!=null && filechek.equals("yes")){
request.setAttribute("successInfo", "正在进行文件校验,请稍候......");
request.setAttribute("requestPath", request.getContextPath()+"/sysfile.do?fileaction=checkFileIntegrity&filechek=no");
return mapping.findForward("success");
}else{
String dateformat = (String)session.getAttribute("dateformat");
String timeformat = (String)session.getAttribute("timeformat");
float timeoffset= (Float)session.getAttribute("timeoffset");
int timestamp = (Integer)(request.getAttribute("timestamp"));
List listresult = new ArrayList();
CheckFile chekfile = new CheckFile();
int delcount = 0;
int addcount = 0;
int modifycount = 0;
String realPath=servlet.getServletContext().getRealPath("/");
String filepath =realPath + "admin/jsprunfiles.md5";
List<String> filelist = chekfile.displist(filepath);
if (filelist == null) {
request.setAttribute("resultInfo", "没有核对的文件,无法操作。");
return mapping.findForward("result");
}
String[] filedirs = { "./","templates/default/","admin/", "admin/page/",
"admin/page/announcements/", "admin/page/basicsetting/",
"admin/page/basicsetting/creditwizard/", "admin/page/counter/",
"admin/page/forumsedit/", "admin/page/members/", "admin/page/modthreads/",
"admin/page/pluginsconfig/" };
for (String filedir : filedirs) {
int modifynum = 0;
int addnum = 0;
int delnum = 0;
List<FilesVo> resultlist = new ArrayList<FilesVo>();
List<String> targetlist = chekfile.displistBydir(filelist, filedir);
String source = realPath+ filedir;
File file = new File(source);
File[] sourcelist = null;
if (file.isDirectory()) {
sourcelist = file.listFiles();
}
for (int i = 0; i < targetlist.size(); i++) {
String files = (String) targetlist.get(i);
String[] filearray = files.split("\\s\\*");
if (filearray != null && filearray.length > 1) {
filearray[1] = filearray[1];
}
String filespath = realPath+ filearray[1];
File filenew = new File(filespath);
boolean flag = false;
boolean modify = false;
for (File fi : sourcelist) {
if (filenew.equals(fi)) {
String targetlength = Md5Token.getInstance().getLongToken(fi.length() + "");
if (!targetlength.equals(filearray[0])) {
FilesVo filevo = new FilesVo();
filevo.setFilename(fi.getName());
filevo.setFilebyte(fi.length() + "");
long lastModified = fi.lastModified();
String date = Common.gmdate(dateformat+" "+timeformat, (int)(lastModified/1000), String.valueOf(timeoffset));
if(timestamp-(lastModified/1000)<7*86400){
filevo.setModifyDate("<b>"+date+"</b>");
}else{
filevo.setModifyDate(date);
}
filevo.setStatus("<font color='red'>文件被修改</font>");
modifycount++;
modifynum++;
resultlist.add(filevo);
modify = true;
}else{
flag = true;
}
}
}
if (flag) {
FilesVo filevo = new FilesVo();
filevo.setFilename(filenew.getName());
filevo.setFilebyte(filenew.length() + "");
long lastModified = filenew.lastModified();
String date = Common.gmdate(dateformat+" "+timeformat, (int)(lastModified/1000), String.valueOf(timeoffset));
if(timestamp-(lastModified/1000)<7*86400){
filevo.setModifyDate("<b>"+date+"</b>");
}else{
filevo.setModifyDate(date);
}
filevo.setStatus("文件正确");
resultlist.add(filevo);
} else if(!modify){
delcount++;
delnum++;
FilesVo filevo = new FilesVo();
filevo.setFilename(filenew.getName());
filevo.setStatus("文件被删除");
resultlist.add(filevo);
}
}
for (File fi : sourcelist) {
boolean flag = false;
for (int i = 0; i < targetlist.size(); i++) {
String files = (String) targetlist.get(i);
String[] filearray = files.split("\\s\\*");
filearray[1] = filearray[1];
String filespath = realPath+ filearray[1];
File filenew = new File(filespath);
if (fi.equals(filenew)) {
flag = true;
}
}
if (!flag && !fi.isDirectory()) {
if(Common.matches(fi.getName(), "(jsp|js|htm)$")){
addcount++;
addnum++;
FilesVo filevo = new FilesVo();
filevo.setFilename(fi.getName());
filevo.setFilebyte(fi.length() + "");
long lastModified = fi.lastModified();
String date = Common.gmdate(dateformat+" "+timeformat, (int)(lastModified/1000), String.valueOf(timeoffset));
if(timestamp-(lastModified/1000)<7*86400){
filevo.setModifyDate("<b>"+date+"</b>");
}else{
filevo.setModifyDate(date);
}
filevo.setStatus("<font color='green'>文件未知</font>");
resultlist.add(filevo);
}
}
}
String propeter = "";
if (addnum > 0) {
propeter = propeter + "文件未知:" + addnum;
}
if (delnum > 0) {
propeter = propeter + "文件被删除:" + delnum;
}
if (modifynum > 0) {
propeter = propeter + "文件被修改:" + modifynum;
}
if(filedir.equals("")){
filedir = "./";
}
listresult.add("<td>" + filedir+ "</td><td colspan='3' style='text-align:right'>"+ propeter + "</td>");
listresult.add(resultlist);
}
request.setAttribute("listresult", listresult);
request.setAttribute("result", "文件被修改: " + modifycount + " 文件被删除: " + delcount + " 文件未知:" + addcount);
return mapping.findForward("fileintegrity");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -