当前位置: 首页 > 工具软件 > MCMS > 使用案例 >

mcms系统访问后台提示“系统配置错误!详细看论坛常见问题贴:点击查看”

甘君之
2023-12-01

今天博主遇见了这个问题,虽然没有彻底解决我的问题,但是楼主跟了一下源码,可以说下为什么会出现这个问题:

注:新手一个,可能写的不好,请各位大大见谅。如果不想查看源码请直接跳到文章结尾处,博主总结了出现此问题的原因。


1.首先,我们应该要找到这些错误的提示文字为什么会出现,在mcms的登录页面中,我们可以看到下面的代码:

<div class="page-container">
		<#if app?has_content>
        <h1><#if app?has_content>${app.appName}</#if></h1>
        <div class="row" style="margin:0px;">
        
	        <form class="form-horizontal" id="loginForm" action="${base}/ms/checkLogin.do">
	            <input type="text" name="managerName" class="managerName"  placeholder="用户名" value="" autofocus/>
                <div style="color:#F00; margin-top:10px; display:none;" id="show">用户名不能为空</div>
	            <input type="password" name="managerPassword" style="  margin-top: 10px;" class="managerPassword" placeholder="密    码"  value=""/>
	            <div style="color:#F00; margin-top:10px; display:none;" id="show1">密码不能为空</div>
	            <input type="text" id="managerYzm" name="managerYzm" style="  margin-top: 10px;width:180px" class="managerName" placeholder="验  证  码"  value=""/>
	            <img  id="imgcode1" src=""  width="120px" height="40" style="position:relative;top:15px;left:-3px;border-radius:4px;">
	            <div style="color:#F00; margin-top:10px; display:none;" id="show2">验证码错误</div>
	            <button id="loginBtn" type="button">登录</button>
	        </form>
        </div>
        <#else>
        	系统配置错误!详细看论坛常见问题贴:<a href="http://ms.ming-soft.com/mbbs/13000/detail.do" target="_blank">点击查看</a>
        </#if>
    </div>

根据代码,我们可以看出,出现错误文字的原因是传递给页面的app为null,那么我们就要去找谁给这个页面传递的app这个对象。

2.在com.mingsoft.basic.action下的LoginAction.java页面中我们找到了这些代码:

public String login(HttpServletRequest request) {
		// 根据请求地址来显示标题
		AppEntity app = this.getApp(request);
		// 判断应用实体是否存在
		if (app != null) {
			// 检测应用是否有自定义界面b
			SystemSkinEntity sse = systemSkinBiz.getByManagerId(app.getAppManagerId());
			if (sse != null && !StringUtil.isBlank(sse.getSystemSkinLoginPage())) {
				return "redirect:/" + sse.getSystemSkinLoginPage();
			}
		} else {

			File file = new File(this.getRealPath(request, "WEB-INF/ms.install"));
			if (file.exists()) {
				String defaultId = FileUtil.readFile(this.getRealPath(request, "WEB-INF/ms.install")).trim();
				if (!StringUtil.isBlank(defaultId)) {
					app = (AppEntity) appBiz.getEntity(Integer.parseInt(defaultId));
					app.setAppUrl(this.getUrl(request));
					appBiz.updateEntity(app);
					// 获取tomcat下面默认的manager文件夹
					File managerFile = new File(request.getSession().getServletContext().getRealPath("/"));
					new File(managerFile.getParent() + File.separator + "/manager").delete();
					FileUtil.writeFile(defaultId, this.getRealPath(request, "WEB-INF/ms.install.bak"), Const.UTF8);
					file.delete();
				}
			}

		}
		request.setAttribute("app", app);

		return "/manager/login";
	}
此方法中传递了我们登录的request,在方法开始地方我们可以看到,有一个app的实体类被创建了,而且它的值是getApp方法对request操作后的返回值,那么我们就需要去getApp方法中进行查看了。

3.LoginAction类继承了BaseAction类,getApp方法就是在BaseAction类中,即下面的代码:

protected AppEntity getApp(HttpServletRequest request) {
		AppEntity app = new AppEntity();
		// 获取用户所请求的域名地址
		IAppBiz appBiz = (IAppBiz) getBean(request.getServletContext(), "appBiz");
		AppEntity website = appBiz.getByUrl(this.getDomain(request));
		if (website == null) {
			return null;
		}
		BeanUtils.copyProperties(website, app);
		return app;
	}

我们可以看到此方法确实返回了一个app的实体类,而且方法中创建了另一个app的实体类叫做website,app是由website复制而来,所以我们需要去查看website是如何获取的。

4.在BaseAction类中,我们找到了getDomain方法,如下:

protected String getDomain(HttpServletRequest request) {
		String path = request.getContextPath();
		String domain = request.getServerName();
		if (request.getServerPort() == 80) {
			domain += path;
		} else {
			domain += ":" + request.getServerPort() + path;
		}
		return domain;
	}

在这个方法中,对我们请求的request进行了分解,得到了我们访问的域名,而后在第三步中,根据此url去数据库中获取了app的实体类。所以,如果你的网站出现了标题的错误,有可能是你的数据库中存放的url与你部署的url并不相同。

5.上面是我们去数据库中获取了app的实体类,而后台中,对于我们获取失败也做了处理,我们回到第二步的方法中,刚刚我们只看了第一步获取到了我们需要的app,如果获取不到的话就会进入到else语句当中:

File file = new File(this.getRealPath(request, "WEB-INF/ms.install"));
			if (file.exists()) {
				String defaultId = FileUtil.readFile(this.getRealPath(request, "WEB-INF/ms.install")).trim();
				if (!StringUtil.isBlank(defaultId)) {
					app = (AppEntity) appBiz.getEntity(Integer.parseInt(defaultId));
					app.setAppUrl(this.getUrl(request));
					appBiz.updateEntity(app);
					// 获取tomcat下面默认的manager文件夹
					File managerFile = new File(request.getSession().getServletContext().getRealPath("/"));
					new File(managerFile.getParent() + File.separator + "/manager").delete();
					FileUtil.writeFile(defaultId, this.getRealPath(request, "WEB-INF/ms.install.bak"), Const.UTF8);
					file.delete();
				}
			}

方法中去项目中读取了ms.install配置文件,文件中我只放入了一个1,这是数据库app表中我的网站的app_id,方法中获取了这个ID作为默认的ID去数据库中查询到了对应的实体类。所以,你的项目报错,也有可能是此文件丢失未找到。


总结:

mcms系统访问后台提示“系统配置错误!详细看论坛常见问题贴:点击查看”报错,原因大致有下面的两个:

1.数据库app表中存放的网站的url与你部署的网站url不一致

2.WEB-INF/ms.install配置文件丢失,或者文件中存放的数字不是你的网站在app表中的app_id

 类似资料: