jeecms源码分析(二)

  • 普通用户登录

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

 

对应web.xml

Xml代码   收藏代码
  1. <!-- Spring 刷新Introspector防止内存泄露 -->  
  2.     <listener>  
  3.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  4.     </listener>  
  5.     <session-config>  
  6.       <!-- session超时定义,单位为分钟 -->  
  7.         <session-timeout>20</session-timeout>  
  8.     </session-config>  
  9.     <welcome-file-list>  
  10.         <welcome-file>index.html</welcome-file>  
  11.         <welcome-file>index.shtml</welcome-file>  
  12.         <welcome-file>index.jhtml</welcome-file>  
  13.     </welcome-file-list>  
  14.     <error-page>  
  15.         <error-code>403</error-code>  
  16.         <location>/WEB-INF/error/403.html</location>  
  17.     </error-page>  
  18.     <error-page>  
  19.         <error-code>404</error-code>  
  20.         <location>/404.html</location>  
  21.     </error-page>  

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

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

 

  • 登录管理页面

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

web.xml中的配置:

Xml代码   收藏代码
  1. ...  
  2.     <servlet>  
  3.         <servlet-name>JeeCmsAdmin</servlet-name>  
  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.         <init-param>  
  6.             <param-name>contextConfigLocation</param-name>  
  7.             <param-value>/WEB-INF/config/jeecms-servlet-admin.xml</param-value>  
  8.         </init-param>  
  9.         <load-on-startup>1</load-on-startup>  
  10.     </servlet>  
  11. ...  
  12.     <servlet-mapping>  
  13.         <servlet-name>JeeCmsAdmin</servlet-name>  
  14.         <url-pattern>/jeeadmin/jeecms/*</url-pattern>  
  15.     </servlet-mapping>  
  16. ...  

 

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

 

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

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

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

 

AdminLocaleInterceptor:本地化信息拦截器

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

后面重点分析adminContextInterception

 

Xml代码   收藏代码
  1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
  2.     <property name="interceptors">  
  3.         <list>  
  4.             <ref bean="adminContextInterceptor"/>  
  5.             <ref bean="adminLocaleIntercept"/>  
  6.             <ref bean="fireWallInterceptor"/>  
  7.         </list>  
  8.     </property>  
  9. </bean>  
  10. <bean id="adminContextInterceptor" class="com.jeecms.cms.web.AdminContextInterceptor">  
  11.     <property name="auth" value="true"/>  
  12.     <property name="loginUrl" value="/jeeadmin/jeecms/login.do"/>  
  13.     <property name="returnUrl" value="/jeeadmin/jeecms/index.do"/>  
  14.     <property name="excludeUrls">  
  15.         <list>  
  16.             <value>/login.do</value>  
  17.             <value>/logout.do</value>  
  18.         </list>  
  19.     </property>  
  20. </bean>  
  21. <bean id="adminLocaleIntercept" class="com.jeecms.cms.web.AdminLocaleInterceptor"/>  
  22.   
  23. <bean id="fireWallInterceptor" class="com.jeecms.cms.web.FireWallInterceptor">  
  24. </bean>  

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

Xml代码   收藏代码
  1. <bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.RichFreeMarkerViewResolver">  
  2.         <property name="prefix" value="/jeecms_sys/"/>  
  3.         <property name="suffix" value=".html"/>  
  4.         <property name="contentType" value="text/html; charset=UTF-8"/>  
  5.         <property name="exposeRequestAttributes" value="false"/>  
  6.         <property name="exposeSessionAttributes" value="false"/>  
  7.         <property name="exposeSpringMacroHelpers" value="true"/>  
  8.     </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的信息从数据库中获取。

Java代码   收藏代码
  1. @Override  
  2. public void postHandle(HttpServletRequest request,  
  3.         HttpServletResponse response, Object handler, ModelAndView mav)  
  4.         throws Exception {  
  5.     CmsUser user = CmsUtils.getUser(request);  
  6.     // 不控制权限时perm为null,PermistionDirective标签将以此作为依据不处理权限问题。  
  7.     if (auth && user != null && !user.isSuper() && mav != null  
  8.             && mav.getModelMap() != null && mav.getViewName() != null  
  9.             && !mav.getViewName().startsWith("redirect:")) {  
  10.         mav.getModelMap().addAttribute(PERMISSION_MODEL, user.getPerms());  
  11.     }  
  12. }  
 

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

Java代码   收藏代码
  1. @Override  
  2. public void afterCompletion(HttpServletRequest request,  
  3.         HttpServletResponse response, Object handler, Exception ex)  
  4.         throws Exception {  
  5.     // Sevlet容器有可能使用线程池,所以必须手动清空线程变量。  
  6.     CmsThreadVariable.removeUser();  
  7.     CmsThreadVariable.removeSite();  
  8. }  
 

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

 

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

 

对应的action的配置分别为:

 

Xml代码   收藏代码
  1. <bean id="cmsLoginAct" class="com.jeecms.cms.action.admin.CmsLoginAct"/>  
  2. <bean id="welcomeAct" class="com.jeecms.cms.action.admin.WelcomeAct"/>  

 

  • CmsLoginAct

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

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

??logon在哪里配置。。。

 

Java代码   收藏代码
  1. @RequestMapping(value = "/login.do", method = RequestMethod.GET)  
  2. public String input(HttpServletRequest request,  
  3.         HttpServletResponse response, ModelMap model) {  
  4.     String processUrl = RequestUtils.getQueryParam(request, PROCESS_URL);  
  5.     String returnUrl = RequestUtils.getQueryParam(request, RETURN_URL);  
  6.     String message = RequestUtils.getQueryParam(request, MESSAGE);  
  7.     String authId = (String) session.getAttribute(request, AUTH_KEY);  
  8.     if (authId != null) {  
  9.         // 存在认证ID  
  10.         Authentication auth = authMng.retrieve(authId);  
  11.         // 存在认证信息,且未过期  
  12.         if (auth != null) {  
  13.             String view = getView(processUrl, returnUrl, auth.getId());  
  14.             if (view != null) {  
  15.                 return view;  
  16.             } else {  
  17.                 model.addAttribute("auth", auth);  
  18.                 return "logon";  
  19.             }  
  20.         }  
  21.     }  
  22.     writeCookieErrorRemaining(null, request, response, model);  
  23.     if (!StringUtils.isBlank(processUrl)) {  
  24.         model.addAttribute(PROCESS_URL, processUrl);  
  25.     }  
  26.     if (!StringUtils.isBlank(returnUrl)) {  
  27.         model.addAttribute(RETURN_URL, returnUrl);  
  28.     }  
  29.     if (!StringUtils.isBlank(message)) {  
  30.         model.addAttribute(MESSAGE, message);  
  31.     }  
  32.     return "login";  
  33. }  
 

2、login的提交

Java代码   收藏代码
  1. @RequestMapping(value = "/login.do", method = RequestMethod.POST)  
  2.     public String submit(String username, String password, String captcha,  
  3.             String processUrl, String returnUrl, String message,  
  4.             HttpServletRequest request, HttpServletResponse response,  
  5.             ModelMap model) {  
  6.         Integer errorRemaining = unifiedUserMng.errorRemaining(username);  
  7.         WebErrors errors = validateSubmit(username, password, captcha,  
  8.                 errorRemaining, request, response);  
  9. 。。。   
 

3、logout提交

Java代码   收藏代码
  1. @RequestMapping(value = "/logout.do")  
  2.     public String logout(HttpServletRequest request,  
  3.             HttpServletResponse response) {  
  4.         String authId = (String) session.getAttribute(request, AUTH_KEY);  
  5.         if (authId != null) {  
  6.             authMng.deleteById(authId);  
  7.             session.logout(request, response);  
  8.         }  
  9.         String processUrl = RequestUtils.getQueryParam(request, PROCESS_URL);  
  10.         String returnUrl = RequestUtils.getQueryParam(request, RETURN_URL);  
  11.         String view = getView(processUrl, returnUrl, authId);  
  12.         if (view != null) {  
  13.             return view;  
  14.         } else {  
  15.             return "redirect:login.jspx";  
  16.         }  
  17.     }  
 
  • WelcomeAct

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

Java代码   收藏代码
  1. @RequestMapping("/index.do")  
  2. public String index() {  
  3.     return "index";  
  4. }  

 2、index.html

top.do 和main.do 组成

main.html 有left.do 和right.do

 

3、...

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

 

分享到:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jeecms v9.3 正式版 源码包 更新日志 1、栏目添加选择模型模板只选择一个报错 2、内容复用待审核查询报错(开源版) 3、根栏目添加内容报错 4、后台页面样式调整 5、后台编辑器分页问题 7、数据统计今日数据没有问题 8、公众号推送菜单和群发微信菜单获取微信端消息返回处理 9、OSS管理添加appkey_secretId后台未解密导致数据存储错误 10、会员中心留言列表报错 11、工作流节点空值处理 12、手机模板在静态页生成的情况下url错误处理 13、新增百度主动推送 14、内容删除同时删除静态页(含FTP) 15、栏目和内容静态化调整成只生成前10页 16、activation jcaptcha freemarker JAR部分用户反映下载不了,调整pom采用本地jar 17、栏目没有选择模型模板的情况下,发布内容选择不到模型问题处理 JEECMS简介 JEECMS是JavaEE版网站管理系统(Java Enterprise Edition Content Manage System)的简称。 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 · 采用hibernate3 spring mvc spring2 freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 · 完全生成全站静态页面,可自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录 jeecms页面展示:   相关阅读 同类推荐:CMS系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值