当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

Acegi(十一):鉴戒Acegi的Exception的非常处理[Java编程]

赞助商链接



  本文“Acegi(十一):鉴戒Acegi的Exception的非常处理[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本日改项目中的一个问题时, 不由自住地想到了Acegi非常处理. 目前相比项目中的非常处理后, 非常感慨Acegi对非常的处理呀.

先大致回想下Acegi里的非常处理. 这里说Acegi的非常处理是指环绕ExceptionTranslationFilter展开的, 当然别的地方也有,暂时不做考虑.

Acegi配置中在filterInvocationInterceptor前加了一个 exceptionTranslationFilter, 这样在整个办法调用栈里, exceptionTranslationFilter的doFilter是比filterInvocationInterceptor要低一层的, 而filterInvocationInterceptor的doFilter是很有大概抛出多种非常的, 这些非常即包含Acegi自身的认证时非常和权限不够非常,也包含Serlet标准中大概抛出ServletException或 IOException. 不过filterInvocationInterceptor自身并没有处理任何非常,  不管有什么非常都采纳顺其自然的方法,并且它自己还抛出了AuthenticationException和AccessDeniedException 两个非常.

非常由谁处理呢? 交给exceptionTranslationFilter来处理, 顾名思义, 这个Filter的本职工作就是来处理非常这些麻烦事的. 看源码, 我们知道, 这个filter除了非常处理外什么事都不做. 由handleException这个办法来专门跟来自filterInvocationInterceptor的非常打交道.

这样做有什么好处? 好处大大的, 解耦合, "冲锋陷阵"的"冲锋陷阵",做"后勤"的做"后勤", 大家各司其职,井井有条, 这样两方都能施展出最大作用.终究的整体作战效果也会出奇地好.

再看项目中的一个小例子, 看以下代码:

Java代码

protected String sendAlertMessage(String to,String subject,String msg,String from) {
SimpleMailMessage mailMessage = createMessage(to,subject, msg,from);
try{
mailEngine.sendEmail(mailMessage);
}
catch(MailException ex) {
log.error(ex.getMessage());
return ex.getMessage();
}
return "1";
}

这段代码是用来发邮件的, 我们看下这里的非常处理. mailEngine的sendEmail会抛出非常的, 看了下文档它的抛出的非常为MailException, 而MailException有四个子类: MailAuthenticationException,MailParseException,MailPreparationException, MailSendException.而这里都给catch住了, 只把非常的message以String范例返回, 这样sendAlertMessage办法的调用者要想知道是邮件发送失利的缘由就得烦些周折了. 本来MailException及其子类有很丰富的非常信息, 但由于sendAlertMessage办法的越俎代庖,画蛇添足了.

目前假定这样一种情形, 程序要发邮件, 可收件人的地址不存在, 系统要求把报错信息反馈给终端用户, 即显示信息"由AAA发送给BBB的邮件,由于BBB的email不存在而发送失利", 这里为了更友好地显示, AAA用的是Ta的真名,而没有效Ta的邮件地址. 为了显示这样的报错信息, 调用sendAlertMessage就麻烦大了,因为这里是没有AAA的真名的.

于是我们想,能不能像Acegi里处理非常那样用一个单独的办法来做呢?  这样的计划明显是行的通的.

-----------后记-------------

1, 初学Java时, 知道OOP时非常处理的上风. 可项目中或自己写代码时,很少能全局地考虑非常处理, 大多情形下,发现IDE里显示有非常没处理了,想也没多想地给catch住了, 目前看来,非常处理时学问不小.

2, 这篇也是研究Acegi以来,除Security方面外,感受对自己面向对象帮忙最大也最明显的一次, 也让自己小小窃喜了下.

3, 其实是昨天发现项目中sendAlertMessage办法的不妙的, 当时也想写下来, 可老是理不出思绪来. 本日做完头给安置的工作后,趁着情感高涨,再回头看这个问题时, 一下就想到Acegi时的非常处理. 于是有了这篇还算说得过去的记录. 头脑要复苏,不然要放一放了. 碰到问题,不要急也不要灰心, 办法老是有的, 静下心一遍两各处去看,会有线索的. 呵呵, 有点想小学生作文.

4,  不要只想着成功,更要想着失利后的信息的反馈.仿佛大大都情形下, 失利考虑的很少.


  以上是“Acegi(十一):鉴戒Acegi的Exception的非常处理[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Acegi(一):酝酿将近一年后的提高
  • Acegi(二): 苍茫后,写还是不写?
  • Acegi(三):Acegi?Who are you?
  • Acegi(四):Acegi初体验及初解剖
  • <b>Acegi源码研究(五):七剑下天山</b>
  • Acegi源码研究(六):Acegi编码/筹划碎得
  • Acegi(七):LogoutFilter配置及几个问题
  • Acegi(八):securityContextHolderAwareRequestFilter
  • Acegi(九) 子类SavedRequestAwareWrapper
  • <b>Acegi(十):securityContextHolderAwareRequestFilter结</b>
  • Acegi(十一):鉴戒Acegi的Exception的非常处理
  • Acegi(十二):anonymousProcessingFilter有什么好玩的?
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .