项目模块--2.统一处理异常

简介:

  在项目中为了阻止用户和管理员不登陆就进行操作的行为,特意创建登陆异常,并统一管理程序抛出的异常,对异常进行处理。

步骤一:创建两个异常类

1.AdminLoginNoException类,管理员未登录异常,当管理员未登录却对数据进行操作时抛出。

private static final long SerialVersionUID = 1L;    手动设置序列化版本号;

对象被序列化后,对对象进行修改,也不会改变该序列化版本号(非手动设置的序列化版本号会被更改),可以成功反序列化。

public class AdminLoginNoException extends Exception {
    private static final long serialVersionUID = 1L;//序列化版本号
    //手动设置序列化版本号,该版本号不会被JVM修改,在对象被序列化后更改对象也可以,序列号不变,反序列化能实现
    public AdminLoginNoException(String message){
        super(message);
    }
}

2.UserLoginNoException类,用户为登陆异常,当用户未登录却对数据进行操作时抛出。

public class UserLoginNoException extends Exception {
    private static final long serialVersionUID = 1L;
    public UserLoginNoException(String message){
        super(message);
    }
}

步骤二:创建管理员登陆控制器和前端用户登陆控制器

  两个控制器用来检查管理员或用户是否登陆,如果没用登陆就会抛出相应种类的异常。

1.BaseController.java用来抛出UserLoginNoException,使用@ModelAttribute标签,标识调用该类中的其它方法前,先调用isLogin方法。

 1 import javax.servlet.http.HttpSession;
 2 
 3 @Controller
 4 public class BaseController {
 5     @ModelAttribute
 6     public void isLogin(HttpSession session) throws UserLoginNoException {
 7         if (session.getAttribute("buser")==null){  /*session.getAttribute()和session.setAttribute
 8             相对应,是客户浏览器和服务器之间相互传递信息的工具*/
 9             throw new UserLoginNoException("您还没有登陆");
10         }
11     }
12 }

2.BaseController.java

 

 1 import exception.AdminLoginNoException;
 2 import org.springframework.stereotype.Controller;
 3 import org.springframework.web.bind.annotation.ModelAttribute;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpSession;
 7 
 8 @Controller
 9 public class BaseController1 {
10     @ModelAttribute   //该注解下面的方法,在此类中其它方法被调用前均被调用
11     public void idLogin(HttpSession session, HttpServletRequest request) throws AdminLoginNoException{
12         if (session.getAttribute("backgroungUser") == null) {  //session
13             throw new AdminLoginNoException("没有登陆");
14         }
15     }
16 }

在其它必须先登录后执行的的控制器类中继承这两个类,便能达到预期的效果。

步骤三:MyExceptionHandler类对异常进行统一处理

  HandlerExceptionResolver接口是spring提供用来处理异常的接口,当产生异常时会被该类捕获,使用时在方法resolveException中对异常进行处理。

 1 public class MyExceptionHandler implements HandlerExceptionResolver {
 2     @Override
 3     public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
 4         Map<String,Object> model = new HashMap<String,Object>();
 5         model.put("ex",e);
 6         if (e instanceof  AdminLoginNoException){
 7             httpServletRequest.setAttribute("buser",new BackgroungUsertable());
 8             httpServletRequest.setAttribute("msg","没有登陆,请登陆");
 9             return new ModelAndView("/admin/login",model);
10         }else if (e instanceof UserLoginNoException){
11             httpServletRequest.setAttribute("buser",new ClientUser());
12             httpServletRequest.setAttribute("msg","没有登陆,请登录");
13             return new ModelAndView("/before/login",model);
14         }else {
15             return new ModelAndView("/error/error",model);
16         }
17     }

步骤四:将MyExceptionHandler交给bean元素托管

  此步骤仅是为了将MyExceptionHandler的对象的创建,交由spring框架来完成。

<bean id="MyExceptionResolver" class="exception.MyExceptionHandler"/>

posted on 2020-03-17 12:14  hello,bdiskl  阅读(195)  评论(0编辑  收藏  举报

导航