首页 > 编程语言 > 详细

springboot自定义异常页面

时间:2019-04-17 22:05:27      阅读:157      评论:0      收藏:0      [点我收藏+]

本文以springboot+thmyleaf+shiro为列。

    1.官方默认的视图路径如下技术分享图片

    2.而默认异常页面路径即为:src/main/resources/templates/error;结构如下:

      

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
        |   +- 403.html
        |   +- 500.html
  
      +- <other public assets>
    

    

    3.自定义异常视图处理器:

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authz.AuthorizationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *异常视图处理器
 *
 * @author 
 * @date 2019/4/17
 */
public class ExcetionViewResolver implements HandlerExceptionResolver {

    private static final Logger log= LoggerFactory.getLogger(ExcetionViewResolver.class);
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();

        if ((ex instanceof AuthenticationException) ) {
            modelAndView.setViewName("/error/403");
            modelAndView.getModel().put("msg","登录失败!");
        } else if(ex instanceof  AuthorizationException) {
            modelAndView.setViewName("/error/403");
            modelAndView.getModel().put("msg","没有权限!");
        }else{
            modelAndView.setViewName("/error/500");
            modelAndView.getModel().put("msg","发生未知异常!");
        }
        return modelAndView;
    }
}
                    

    4.注入自定义处理器; 类似于注册filter、servlet等组件,参考 https://blog.csdn.net/king_is_everyone/article/details/53116744

 

/**
 * @author 
 * @date 2018/9/23
 */
@Controller
@SpringBootApplication
public class BootAllRun {
    public static void main(String[] args) {
        SpringApplication.run(BootAllRun.class,args);
  
    }

    
    /**
     * 添加自定义异常-视图 处理器
     *
     * @author 
     * @date 2019/4/17 15:56
     * @param 
     * @return  [返回值说明]
    */
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers){
                exceptionResolvers.add(new ExcetionViewResolver());
            }
        };
    }
}

 

    5.运行结果:

      处理前:

     技术分享图片

 

     

 

      处理后:

    技术分享图片

    

    最后:官网也提供了,自定义错误页面解决样例。但处理关键以HttpStatus status值做划分,异常时则是统一的处理结果(500页面)。本文细化到具体异常匹配处理结果 (官网也提供了依据@ExceptionHandler 处理的思路)。


    总结:SpringMVC框架是围绕着处理所有的HTTP请求和响应的DispatcherServlet的设计。DispatcherServlet控制整个处理流程(包括本文的异常处理DispatcherServlet的handlerExceptionResolvers属性关联),再通过springboot的相关组件注入即可达到相关流程控制。

     

 

springboot自定义异常页面

原文:https://www.cnblogs.com/swz1104919/p/10726329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!