`
ligf06
  • 浏览: 101708 次
  • 性别: 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源码解读

    jeecms 所有源码分析解读,链接cms开发流程,链接cms系统整合架构

    jeecms源码下载

    jeecms源码下载

    jeecms源码包

    jeecms源码包

    jeecms源码

    jeecms源码,spring+springmvc框架,jeecms资源,超好用。

    JEECMS2源码的解读

    JEECMS2源码的解读,介绍JEECMS2源码的结构,开发流程等

    jeecms 源码包

    jeecms 源码包

    jeecms X1.0.1 正式版 源码包

    在二次开发方面,jeecmsV6支持元件式无限插件扩展方式,开发者根据jeecms的插件开发标准所开发出来的插件,插件与jeecms是平行的,无论是插件升级还是jeecms系统升级,都可以实现独立升级,插件与插件、插件与jeecms...

    jeecms v8.1 源码

    JEECMSv8.1是一款支持微信小程序、栏目模型、内容模型交叉自定义、以及具备支付和财务结算的内容电商为一体内容管理系统:通过后台的简单设置即可自定义出集新闻管理、图库管理、视频...doc/jeecms模板置标使用手册.doc

    JeeCMS 2012 源码包

    摘要:JSP源码,CMS系统,JeeCMS  jeecms v2012版是一款集新闻管理、图库管理、视频管理、下载系统、作品管理、产品发布及留言板于一体的综合性CMS系统。  jeecms v2012版新增功能如下:  1、新增统计功能  1.1...

    jeecms 终极版源码

    次为jeecms 源码!适合初学者研究!没有java基础的人也可以应用,只要求有点美工基础即可!

    JEECMS内容管理系统1.1源码

    JEECMS内容管理系统1.1源码。。。。。。。。。。。。

    jeecms3.2.2版本源码包

    jeecms开发源码包,jeecms网站上提供 自己修改之后的源码,有兴趣的可以共同讨论下

    jeecms最新源码

    www.lnjie.com整理。jeecms最新源码带数据库,可直接导入myeclipse运行

    JeeCMS 3.0.4 源码

    JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 ...

    jeecms5.1-src.zip 源码包

    jeecms 源码包快来下载吧

    jeecms源码级安装使用文档

    jeecms3.0.4版本,自己总结的使用文档。

    jeecms二次开发必备

    最近在项目中要用jeecms进行二次开发,自己整理了一些jeecms二次开发的相关资料。包括jeecms工程包结构分析和标签使用等。。。

    jeecms-3.1.1 源码版

    JEECMS是JavaEE版网站管理系统 (Java Enterprise Edition Content Manage System)的简称。 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 · 采用SpringMVC3+Spring3+Hibernate3+...

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

    前几年的JavaJsp应用源码Demo,主要面向的是学生毕业设计学习。

    JEECMS 精简第二部分 共2

    JEECMS 精简第二部分 共2

Global site tag (gtag.js) - Google Analytics