在代码编写的逻辑关系中,难免存在着这样或者那样的异常,有的异常是JDK已经定义的,如NullPointException,IOException,RunTimeException。基本遇到此类异常我们通常的做法是try{}catch{}或是throw就不了了之了,如果想通过不同类型的异常进行不同的处理,比如遇到找不到页面的就跳转到404,遇到空指针异常就跳刀500,遇到权限问题跳转到403,这些都是可以通过SpringMVC的统一异常处理来实现的。
本人遇到的场景就是项目需要重构,会给用户赋予角色,角色又绑定着权限,权限又和菜单挂钩,就间接的建立了用户和访问菜单权限的关系,比如给C1用户赋予了M1的菜单权限,C2用户赋予了M2的菜单权限,结果来看,C1只能访问M1而不能访问M2,同样的,C2只能访问M2而不能访问M1.
权限的实现是通过AOP,在spring-mvc中进行目标controller的扫描,然后定义切面方法,对于指定的controller进行过滤,进行权限判定,如果有权限则正常访问,如果没有权限则抛出异常,该异常为自定义的,有指定的code和message,异常处理中心进行所有异常的过滤,如果是指定定义的异常类型,则返回403,其他异常先返回500,代码如下:
切面 自定义Exception 异常处理的bean注入 异常处理中心
网友评论