dorado框架权限控制实现方案 V1.0(7)

2019-02-20 23:57

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页


dorado框架权限控制实现方案 V1.0(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: