- <!-- Configure -->
- <bean class="org.marmot.ConfigureInitializer" lazy-init="false" init-method="init">
- <property name="properties">
- <props>
- … … …
- <prop key="view.defaultFrameStyle">/sample/main/style1</prop>
- … … …
- </props>
- </property>
- </bean>
Marmot Framework最终通过Mapping文件——marmot.map.xml中的authentication和mainFrame这两个Controller结合上面的"view.defaultFrameStyle"配置来定位,登录页面和主框架的相关界面。authentication和mainFrame的声明如下:
- <controller name="authentication" clazz="org.marmot.framework.main.AuthenticationController">
- <action>
- <forward name="success" path="$pageRoot/login.jsp" />
- </action>
- <action name="login">
- <forward name="success" path="/mainFrame.d" redirect="true" />
- <exception clazz="java.lang.Exception" path="/authentication.d" />
- </action>
- <action name="logout">
- <forward name="success" path="authentication.d" redirect="true" />
- </action>
- <action name="getCaptchaImage" />
- <action name="sessionExpired">
- <forward name="success" path="$pageRoot/session-expired.jsp" />
- </action>
- <action name="accessDenied">
- <forward name="success" path="$pageRoot/access-denied.jsp" />
- </action>
- </controller>
- <controller name="mainFrame" clazz="org.marmot.framework.main.MainFrameController" safe="true">
- <action>
- <forward name="success" path="$pageRoot/main-frame.jsp" />
- </action>
- <action name="welcome">
- <forward name="success" path="$pageRoot/welcome.jsp" />
- </action>
- <action name="about">
- <forward name="success" path="$pageRoot/about.jsp" />
- </action>
- </controller>
配置中的$pageRoot都将在运行时被替换成"view.defaultFrameStyle"设置的实际路径,因此在实际使用时一般不需要来调用authentication和mainFrame这两个Controller的配置信息。
建议您在构造系统时首先到Marmot Framework中提供的示例应用选择一种比较接近期望的主框架页面,把它们复制到自己的应用中,然后修改marmot-base-context.xml中"view.defaultFrameStyle"项参数。最后再根据实际的需要来对各个jsp页面进行外观上的调整。在此过程中应当也不需要修改各个jsp的文件名。
authentication和mainFrame这两个Controller的说明如下:
l authentication
§ <action> 显示登录界面。
§ login 登录的提交入口,即登录<Form>的action属性。对于采用AJAX方式的登录界面此项可能没用。
§ logout 注销的提交入口。对于采用AJAX方式的登录界面此项可能没用。
§ getCaptchaImage 获取(下载)登录验证码的action。
§ sessionExpired Session超时的错误页面。当系统超时后业务界面自动转向到的页面。
§ accessDenied 访问权限不足时的错误页面。
l mainframe
§ <action> 主框架界面的入口action。
§ welcome 工作区的默认页面。
§ about 关于页面。
登录功能除了需要定制登录界面外,还需要自行实现具体的登录逻辑。具体的做法是实现org.marmot.framework.security.Authenticator接口,该接口的声明如下:
- package org.marmot.framework.security;
- /**
- * 登录功能的接口
- * @author Benny Bao
- */
- public interface Authenticator {
- /**
- * 登录系统.
- * 如果登录失败应抛出异常,否则框架会认为系统登录成功.
- * @param user 用户名
- * @param password 口令
- * @param attributies 附加的登录信息
- * @throws Exception
- */
- public void login(String user, String password, Object attributies)
- throws Exception;
- /**
- * 注销
- * @throws Exception
- */
- public void logout() throws Exception;
- }
很多时候,在Authenticator的实现类中需要获得HttpServletRequest对象,以便于访问Session。如果您需要实现这样的功能,可以考虑继承AbstractHttpAuthenticator而不是直接实现Authenticator。AbstractHttpAuthenticator的声明如下:
- package org.marmot.framework.security;
- import javax.servlet.http.HttpServletRequest;
- import com.bstek.dorado.common.DoradoContext;
- import com.bstek.dorado.common.HttpDoradoContext;
- /**
- * 支持获取HttpServletRequest对象的{@link org.marmot.framework.security.Authenticator}抽象实现类.
- * @author Benny Bao
- */
- public abstract class AbstractHttpAuthenticator implements Authenticator {
- /**
- * 返回当前线程对应的HttpServletRequest对象.
- * @return HttpServletRequest对象.
- */
- protected HttpServletRequest getRequest() {
- DoradoContext context = (HttpDoradoContext) DoradoContext.getContext();
- if (context instanceof HttpDoradoContext) {
- return ((HttpDoradoContext) context).getRequest();
- }
- else {
- return null;
- }
- }
- }
完成上述实现类之后,只要将该类配置到WEB-INF/configs/marmot-framework-context.xml的marmot.authenticator中就可以了。
事实上,在很多情况下并不是必须使用AbstractHttpAuthenticator,因为通过DoradoContext同样可以很简单的访问Session中的属性。DoradoContext的使用方法见dorado的相应文档。 |
1.验证逻辑类
WEB-INF/configs/marmot-framework-context.xml的marmot.authenticator中
2.登录的跳转逻辑(比如成功跳转到什么地方,失败跳转到什么地方)
marmot.map.xml中的authentication详细描述了跳转的整个过程;
疑问:
页面中的变量与验证逻辑类如何一一对应,比如用户名
很多系统都会使用登录界面作为系统的默认页。设置系统默认页最直接的方法就是在web.xml中增加welcome-file-list的设置。例如:
除了这个方法以外,您也可以考虑使用Marmot Framework中提供的JS缓存验证页(index.html)面作为系统默认页。
由于基于dorado的应用需要下载一些基础JS库文件,因此当用户第一次访问某dorado应用时,这些JS库文件在不开启ZGIP的情况下大致会产生280KB的下载数据量,在开启ZGIP的情况下大致会产生80KB的下载数据量。如此,在低速网络环境下,当用于第一次访问某dorado应用中的页面时,可能会面对一段时间的白屏已等待这些JS库文件被下载到本地。
index.html可以以进度条的方式提示用户dorado JS库文件当前的下载进度,以避免用户变得心烦气躁。当index.html完成了JS库文件的下载后会自动跳转到实际的应用首页中,在使用时您可能需要手工的修改index.html中跳转目标地址。例如:
- … … …
- <script>
- function openApp() {
- open("authentication.d", "_self");
- }
- </script>
- … … …
前面提到的"view.defaultFrameStyle"系统参数可以设置默认的主框架风格。不过,我们也可以利用org.marmot.framework.main.FrameStyleUtils在运行时动态的改变主框架的风格(需要页面刷新才能生效)。利用FrameStyleUtils甚至可以为每一个Session定义不同的框架风格,这样,就有可能实现让用户根据自己的喜好来选择框架风格的功能了。