dorado框架权限控制实现方案参考
7 异常处理:
请编写ExceptionAppender类,用于以上所述Log4j中的exceptionAppender 中. 代码如下:
public class ExceptionAppender extends AppenderSkeleton {
protected void append(LoggingEvent arg0) {
ThrowableInformation information =
arg0.getThrowableInformation();
if (information != null) {
Throwable cause = information.getThrowable(); while (cause != null && cause.getCause() != null) { }
HttpServletRequest request = ((HttpDoradoContext)
.getContext()).getRequest(); cause = cause.getCause();
DoradoContext
String userIp = request.getRemoteAddr(); AppLog.info(\ + userIp); String errorMsg = cause.getMessage();
SimpleDateFormat sd = new SimpleDateFormat(\String curTime = sd.format(new Date());
String exceptionName = cause.getClass().getName(); /**
* 记录信息包括异常名,异常信息,发生时间,及用户的IP地址 */
String sql = \
+ \ + exceptionName + \ + errorMsg + \
+ userIp + \ + curTime + \;
HH:mm:ss\);
exception_log(exception_name,msg,ip,happen_time)\
DBStatement dbs = new DBStatement(\); dbs.setSql(sql); try {
dbs.execute();
第31页 共66页
}
}
dorado框架权限控制实现方案参考
} catch (Exception e) { }
AppLog
.info(\
+ exceptionName
+ \
exception_log table\);
public void close() { }
public boolean requiresLayout() { }
// TODO Auto-generated method stub
// TODO Auto-generated method stub
return false;
}
到此为止,日志系统已经配备完成,此日志系统功能非常强大,不但有控制台时时输出日志信息,还会每天都在” WEB-INF/app-logs/”下面产生日志新的以当天日期命名的日志文件,同时对于某些重要的日志信息还可以保存到数据库中. 下面开始本系统的异常处理介绍:
8 异常的基础类
系统异常的基础类来自一个叫做AppException的异常处理类,此类继承自RuntimeException能够处理所有运行时的异常。
代码如下:
public class AppException extends RuntimeException{
private String errorMessage; public AppException(){
this.setErrorMessage(\未知错误!\); }
public AppException(String msg){ }
public String getMessage() {
StringBuffer sb=new StringBuffer(); this.setErrorMessage(msg);
第32页 共66页
}
dorado框架权限控制实现方案参考
sb.append(\);
sb.append(\当前错误发生于:\);
SimpleDateFormat sd=new SimpleDateFormat(\sb.append(sd.format(new Date())); sb.append(\); sb.append(\);
sb.append(\错误内容如下:\); sb.append(this.errorMessage); return sb.toString();
HH:mm:ss\);
public String getErrorMessage() { }
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage; }
return errorMessage;
}
该类自己实现了getMessage()方法,当程序中需要知道详细的异常情况时,调用getMessage()方法便可以得到消息。
此外还提供了一个工具异常类:
public class AppSecurityException extends AppException{
public AppSecurityException(){
this.setErrorMessage(\您无权限访问此页面,请确认您是否已登录,且有访问
本页面的权限!\); } }
public AppSecurityException(String msg){ }
this.setErrorMessage(msg);
此类继承了AppException,可以使用超类的getMessage()方法,同时此类自定义了errorMessage的输出格式,所以此类因该用在系统安全认证方面的异常,比如用户没有登陆成功,则抛出该异常,从而使前台能够捕获到这个登陆异常,并且以正确的信息告知用户。
到此为止,系统异常处理机制已经全部介绍完毕,当今后的系统开发变得更加完善之后可以将各种异常更加细化,这样处理的好处时显而易见的,能够帮助系统测试人员更快的找到错误的根源,同时也能够更好的帮助系统维护人员进行有针对性的系统二次开发。
第33页 共66页
dorado框架权限控制实现方案参考
9 系统登陆模块的实现
成功流程:
用户首先访问login.jsp页面,输入用户名,密码,点击登陆。 页面转到LoginMappng的实现类中进行用户身份的验证。 成功则调转到main.jsp
先访问自定义的视图实现类组件DefaultViewModelImplement,并在这里进行用户权限验证。
验证成功则更具用户的权限加载相应的菜单和页面上的组件。 失败流程:
用户首先访问login.jsp页面,输入用户名,密码,点击登陆。 页面转到LoginMappng的实现类中进行用户身份的验证。
失败则抛出异常,此时会被系统捕捉异常,并且请求/exception.d的Mapping在该实现类中进行错误信息的处理,最后调转到error.jsp页面显示错误信息。
由于主框架页面的视图实现类集成自自定义视图实现类既:
DefaultViewModelImplement,所以此处如果访问失败也会调转到/exception.d进行处理。
实现过程:
编写login.jsp页面的代码,这里需要注意两个地方,第一:处理登陆发生异常之后的提示信息。
例如:
<%
String failure=(String)request.getAttribute(Sys.LOGIN_ERROR_INFO); if(failure==null)failure=\; %>
并且在该页面上显示消息
这样处理的好处在于,当首次登陆时系统若然能够正常的运行 第二:无论采用什么技术进行填写表单,最后提交表单的action路径请使用 <% String path=request.getContextPath()+\; %> 第34页 共66页 dorado框架权限控制实现方案参考 这样系统就会访问doradomapping文件中设置的login节点,并且自动访问该实现类的doAction方法进行身份的验证。 配置mapping节点 如图: 在dev文件中的controllers节点下配置login节点 点击login节点,创建该控制器的实现类,以实现登陆验证的目的: 关于dorado中mapping的使用请参看其它dorado官方文档指南。 Loginmapping的代码实现如下: public class LoginMapping extends DefaultController { public ActionForward doAction(Action action, HttpServletRequest request, HttpServletResponse response) throws Exception { String language=request.getParameter(\ String username = request.getParameter(\ String userpwd = request.getParameter(\ ActionForward forward=action.findForward(\ boolean flag=false; if (StringHelper.isNotEmpty(username) && StringHelper.isNotEmpty(userpwd)) { 第35页 共66页