`
ligf06
  • 浏览: 102943 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Jeecms源码分析(二)

    博客分类:
  • CMS
阅读更多
  • 普通用户登录

在浏览器输入:http://localhost:8080

 

对应web.xml

<!-- Spring 刷新Introspector防止内存泄露 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>
	<session-config>
	  <!-- session超时定义,单位为分钟 -->
		<session-timeout>20</session-timeout>
	</session-config>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.shtml</welcome-file>
		<welcome-file>index.jhtml</welcome-file>
	</welcome-file-list>
	<error-page>
		<error-code>403</error-code>
		<location>/WEB-INF/error/403.html</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/404.html</location>
	</error-page>

 打开首页面: ROOT/index.html,此页面在intall的时候生成,内容为演示站点的首页信息。

 此页面根据初始化的数据生成,为静态页面。具体如何生成,在后面的分析中补上。

 

  • 登录管理页面

在浏览器输入:http://localhost:8080/jeeadmin/jeecms/index.do

web.xml中的配置:

...
	<servlet>
		<servlet-name>JeeCmsAdmin</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/config/jeecms-servlet-admin.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
...
	<servlet-mapping>
		<servlet-name>JeeCmsAdmin</servlet-name>
		<url-pattern>/jeeadmin/jeecms/*</url-pattern>
	</servlet-mapping>
...

 

  • /WEB-INF/config/jeecms-servlet-admin.xml

 

/jeeadmin/jeecms/* 转向 jeecms-servlet-admin.xml

这个是标准的spring 配置文件,这个文件中include了action的配置文件jeecms-servlet-admin-action.xml.

用户登录时要进行一系列的操作,拦截器配置如下:

 

AdminLocaleInterceptor:本地化信息拦截器

FireWallInterceptor:防火墙拦截器,目前还不知道干啥用??

后面重点分析adminContextInterception

 

	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<property name="interceptors">
			<list>
				<ref bean="adminContextInterceptor"/>
				<ref bean="adminLocaleIntercept"/>
				<ref bean="fireWallInterceptor"/>
			</list>
		</property>
	</bean>
	<bean id="adminContextInterceptor" class="com.jeecms.cms.web.AdminContextInterceptor">
		<property name="auth" value="true"/>
		<property name="loginUrl" value="/jeeadmin/jeecms/login.do"/>
		<property name="returnUrl" value="/jeeadmin/jeecms/index.do"/>
		<property name="excludeUrls">
			<list>
				<value>/login.do</value>
				<value>/logout.do</value>
			</list>
		</property>
	</bean>
	<bean id="adminLocaleIntercept" class="com.jeecms.cms.web.AdminLocaleInterceptor"/>
	
	<bean id="fireWallInterceptor" class="com.jeecms.cms.web.FireWallInterceptor">
	</bean>
	

表示层配置,页面的存放在/jeecms_sys/*.html,并指定为UTF-8格式。

<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.RichFreeMarkerViewResolver">
		<property name="prefix" value="/jeecms_sys/"/>
		<property name="suffix" value=".html"/>
		<property name="contentType" value="text/html; charset=UTF-8"/>
		<property name="exposeRequestAttributes" value="false"/>
		<property name="exposeSessionAttributes" value="false"/>
		<property name="exposeSpringMacroHelpers" value="true"/>
	</bean>
 

 

  • AdminContextInterceptor

包路径:com.jeecms.cms.web.AdminContextInterceptor

1、将提交url 为/login.do和/logout.do ,interceptor 不做任何验证。

2、用户 user 为null时,跳转到登陆页面  /login.do。

3、如果user不是admin,则跳出error页面提示,用户无此权限。message="login.notAdmin"

4、或者不属于该站点的admin。 message="login.notInSite"

5、判断user是否有访问权限,如果没有则提示无权访问 message="login.notPermission"

 

将用户权限信息放入view属性中:role的信息从数据库中获取。

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler, ModelAndView mav)
			throws Exception {
		CmsUser user = CmsUtils.getUser(request);
		// 不控制权限时perm为null,PermistionDirective标签将以此作为依据不处理权限问题。
		if (auth && user != null && !user.isSuper() && mav != null
				&& mav.getModelMap() != null && mav.getViewName() != null
				&& !mav.getViewName().startsWith("redirect:")) {
			mav.getModelMap().addAttribute(PERMISSION_MODEL, user.getPerms());
		}
	}
 

拦截器执行完毕后,清除线程变量:

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// Sevlet容器有可能使用线程池,所以必须手动清空线程变量。
		CmsThreadVariable.removeUser();
		CmsThreadVariable.removeSite();
	}
 

另:在此类中,还可以发现jeecms是支持多站点管理的,,,具体还没详细分析。

 

拦截器执行完毕后,如果session中有用户信息则进入index.do,如果用户未登录则进入login.do页面。

 

对应的action的配置分别为:

 

<bean id="cmsLoginAct" class="com.jeecms.cms.action.admin.CmsLoginAct"/>
<bean id="welcomeAct" class="com.jeecms.cms.action.admin.WelcomeAct"/>

 

  • CmsLoginAct

这个action中处理了如下操作:

1、打开login页面,如果存在认证ID,则打开logon页面(即用户已经登陆状态),否则打开login页面。

??logon在哪里配置。。。

 

	@RequestMapping(value = "/login.do", method = RequestMethod.GET)
	public String input(HttpServletRequest request,
			HttpServletResponse response, ModelMap model) {
		String processUrl = RequestUtils.getQueryParam(request, PROCESS_URL);
		String returnUrl = RequestUtils.getQueryParam(request, RETURN_URL);
		String message = RequestUtils.getQueryParam(request, MESSAGE);
		String authId = (String) session.getAttribute(request, AUTH_KEY);
		if (authId != null) {
			// 存在认证ID
			Authentication auth = authMng.retrieve(authId);
			// 存在认证信息,且未过期
			if (auth != null) {
				String view = getView(processUrl, returnUrl, auth.getId());
				if (view != null) {
					return view;
				} else {
					model.addAttribute("auth", auth);
					return "logon";
				}
			}
		}
		writeCookieErrorRemaining(null, request, response, model);
		if (!StringUtils.isBlank(processUrl)) {
			model.addAttribute(PROCESS_URL, processUrl);
		}
		if (!StringUtils.isBlank(returnUrl)) {
			model.addAttribute(RETURN_URL, returnUrl);
		}
		if (!StringUtils.isBlank(message)) {
			model.addAttribute(MESSAGE, message);
		}
		return "login";
	}
 

2、login的提交

@RequestMapping(value = "/login.do", method = RequestMethod.POST)
	public String submit(String username, String password, String captcha,
			String processUrl, String returnUrl, String message,
			HttpServletRequest request, HttpServletResponse response,
			ModelMap model) {
		Integer errorRemaining = unifiedUserMng.errorRemaining(username);
		WebErrors errors = validateSubmit(username, password, captcha,
				errorRemaining, request, response);
。。。 
 

3、logout提交

@RequestMapping(value = "/logout.do")
	public String logout(HttpServletRequest request,
			HttpServletResponse response) {
		String authId = (String) session.getAttribute(request, AUTH_KEY);
		if (authId != null) {
			authMng.deleteById(authId);
			session.logout(request, response);
		}
		String processUrl = RequestUtils.getQueryParam(request, PROCESS_URL);
		String returnUrl = RequestUtils.getQueryParam(request, RETURN_URL);
		String view = getView(processUrl, returnUrl, authId);
		if (view != null) {
			return view;
		} else {
			return "redirect:login.jspx";
		}
	}
 
  • WelcomeAct

1、index.do--对应/jeecms_sys/index.html

	@RequestMapping("/index.do")
	public String index() {
		return "index";
	}

 2、index.html

top.do 和main.do 组成

main.html 有left.do 和right.do

 

3、...

此类比较简单,不再详述,主要就是描述了用户登录后台的页面的组装。

 

分享到:
评论
1 楼 luochen512 2015-01-14  
分析的很到位,对我的帮助很大,希望多多交流

相关推荐

    jeecms源码下载

    1. **搭建环境**:首先需要安装Java开发环境,并配置Maven或Gradle构建工具,然后导入Jeecms源码到IDE(如IntelliJ IDEA或Eclipse)中。 2. **运行项目**:通过IDE的构建和运行功能,启动Jeecms项目,测试其基本功能...

    jeecms源码包

    通过对Jeecms源码的分析和学习,开发者不仅可以了解其工作原理,还能提升Java Web开发技能,尤其是对于MVC框架、数据库操作、权限管理等方面的理解。同时,Jeecms的源码也是一个很好的实践案例,帮助开发者更好地...

    jeecms二次开发必备

    Jeecms的源码结构清晰,便于理解和二次开发。主要包含以下几个模块: - 文章模块:处理文章的发布、管理及展示,是内容管理的基础。 - 辅助模块:提供如用户管理、权限控制等辅助功能。 - 通用操作模块:包含如上传...

    jeecms系统源码

    Jeecms系统源码是基于SSH(Struts2、Spring、Hibernate)架构开发的一款内容管理系统。SSH是一个流行的企业级Java应用框架,它整合了这三个强大的开源框架,为开发者提供了便捷的开发工具和高效的开发模式。 Struts...

    jeecms 源码包

    Jeecms是一款基于Java技术开发的内容管理系统,专为...通过深入学习和实践Jeecms源码,不仅可以掌握Jeecms的使用,还能提升对Java Web开发的整体理解和技能,对于从事企业级网站开发的工程师来说,这是一个宝贵的资源。

    jeecms 终极版源码

    通过深入学习Jeecms源码,不仅可以提升Java编程技能,还能了解内容管理系统的设计思想,这对于想要从事Web开发或者想要自建网站的人来说,无疑是一笔宝贵的财富。在实际操作中,可以逐步分析每个部分的代码,结合...

    [CMS程序]JEECMS 2.4.2 系统源码.zip

    对于学习JEECMS 2.4.2的学生,通过阅读和分析源码,可以深入了解Java Web开发的各种技术,提升实际项目经验,为未来的职业生涯打下坚实基础。同时,这个系统也是了解电子商务网站如何运作,如何处理订单、支付、库存...

    JEECMS V8.0 源码

    6. **源码分析** - `jeecmsv8.1-src` 文件夹包含了JEECMS V8.0的全部源代码,开发者可以通过深入研究源码了解系统的架构和实现细节,为自定义开发提供基础。 - 学习源码有助于提升对Java Web开发的理解,特别是对...

    JEECMS2.0版本源码阅读

    在本文中,我们将对 JEECMS 2.0 版本的源码进行阅读和分析,了解其核心组件、技术框架和实现机制。 一、JEECMS 概述 JEECMS 是一个基于 Java 的内容管理系统,提供了强大的内容管理功能、灵活的模板系统和扩展性强...

    jeecms最新源码

    它的最新源码包含了整个系统的源代码和数据库文件,使得开发者可以深入理解其架构并进行二次开发或定制。在"www.lnjie.com"整理发布的这个压缩包中,有两个主要文件:`jeecms_0_1_beta.sql`和`jeecms`。 `jeecms_0_...

    jeecms3.2.2版本源码包

    这个"jeecms3.2.2版本源码包"包含了Jeecms系统的核心源代码,允许开发者深入理解其工作原理并进行自定义修改。以下是关于Jeecms 3.2.2版本源码的一些关键知识点: 1. **Java技术栈**:Jeecms是用Java语言编写的,...

    [CMS程序]JEECMS 2.4.2 系统程序.zip

    学生可以通过分析源码了解如何实现用户认证和授权。 2. 内容发布:CMS的核心功能之一,支持文本、图片、视频等多种媒体内容的发布、编辑和管理。源码中可能涉及了数据库设计、MVC(模型-视图-控制器)架构以及数据...

    jeecms5.1-src.zip 源码包

    它的源码包"jeecms5.1-src.zip"包含了整个系统的所有源代码,是学习和二次开发的理想资源。Jeecms的核心设计理念在于易用性和灵活性,它允许开发者快速构建功能丰富的网站,并且支持多种定制化需求。 一、Jeecms的...

    jeecms源码解读

    【Jeecms源码解读】 Jeecms是一款基于Java技术的企业级内容管理系统,它提供了丰富的功能,包括内容管理、用户管理、权限控制等,适用于构建各类企业网站、新闻门户等。源码解读对于理解Jeecms的工作原理和进行二次...

    JEECMS v3.0.2 源码包jeecms_v3.0.2_final_src.zip

    1. **集成开发环境(IDE)**: 开发JEECMS源码通常需要像IntelliJ IDEA或Eclipse这样的Java IDE,用于代码编写、编译和调试。 2. **构建工具**: Maven或Gradle可能被用来管理项目的依赖和构建过程,自动化构建和部署...

    jeecms 爬虫 1.3 正式版 (附带整合 jeecms2012工程源码)

    通过查看源码,开发者可以深入理解Jeecms的内部工作原理,学习其架构设计,甚至进行二次开发或定制化改造。 【xercesImpl.jar】是Xerces-J的实现库,这是一个开源的XML解析器,用于处理XML文档。在Jeecms爬虫中,这...

    [CMS程序]JEECMS网站管理系统 v1.1 Beta 源代码_jeecms-1.1.0-beta-src.zip

    通过学习和分析JEECMS的源代码,学生可以了解到如何实现这些功能,为将来从事电子商务平台开发积累经验。 对于计算机专业的毕业设计,JEECMS v1.1 Beta是一个理想的项目起点。学生可以根据项目需求对系统进行改造,...

    jeecms freemarker快乐到家分析

    本篇文章将对Jeecms的Freemarker相关知识进行深入解读和分析。 首先,我们遇到的一个常见问题是,在安装Jeecms后,尝试浏览Database时出现错误:“An internal error occurred during: 'Fetching children of ...

    jeecms笔记(阅读源码)

    Jeecms是一款基于Java技术的企业级内容管理系统,其源码解读可以帮助我们深入理解系统的架构、设计模式以及核心功能实现。本笔记将聚焦于Jeecms的安装过程,并探索其源码中的关键部分。 首先,Jeecms的安装过程在...

    jeecms4的源码

    - **模板引擎**:分析Jeecms4如何使用模板技术生成动态网页。 - **权限控制**:探索用户管理和权限验证机制,了解如何实现不同用户的角色和权限。 - **缓存策略**:查找缓存相关的代码,理解Jeecms4如何提高性能和...

Global site tag (gtag.js) - Google Analytics