zoukankan      html  css  js  c++  java
  • Springboot 自定义多个404页面

    在Springboot中,可以通过修改配置、或者在static文件夹下添加error文件夹引入个性化的404模版。但是如果需要针对不同url地址规则,返回不同样式的404页面,则难以实现了。针对这个问题,可以参考如下内容。

    例如有两种类型的url:
    /admin开头的是后台管理,其他url为常规访问,不考虑安全性的情况下,想返回两种样式的404页面。

    Springboot中的错误页面均是由BasicErrorController控制,继承BasicErrorController,重写其中方法即可实现自定义错误页面。
    package com.haramasu.daomin2.error;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.autoconfigure.web.ErrorProperties;
    import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
    import org.springframework.boot.web.servlet.error.ErrorAttributes;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Collections;
    import java.util.Map;
    
    /**
     * @Auther: DingShuo
     * @Date: 2018/7/23 12:25
     * @Description:
     */
    @Controller
    @RequestMapping(value = "/error")
    public class MyBasicErrorController extends BasicErrorController {
        Logger logger =LoggerFactory.getLogger(MyBasicErrorController.class);
    
        public MyBasicErrorController(ErrorAttributes errorAttributes, ErrorProperties errorProperties) {
            super(errorAttributes, errorProperties);
        }
    
        @Override
        public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
            HttpStatus status = getStatus(request);
            Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(
                    request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));
            response.setStatus(status.value());
            ModelAndView modelAndView = resolveErrorView(request, response, status, model);
            if(modelAndView!=null){
                return modelAndView;
            }else {
                String path=model.get("path").toString();
                logger.debug("该地址无法访问:"+path);
                if(path.startsWith("/admin/")){
                    return new ModelAndView("error/adminError", model);
                }else {
                    return new ModelAndView("error/homeError", model);
                }
    
            }
        }
        
    }
    
    需要注意,继承BasicErrorController后的构造函数,会提示errorProperties的bean未被初始化。
    可以在@Configration注解的类中初始化bean
    package com.haramasu.daomin2.conf;
    
    import org.springframework.boot.autoconfigure.web.ErrorProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @Auther: DingShuo
     * @Date: 2018/7/23 12:08
     * @Description:
     */
    @Configuration
    public class BeanConfig  {
    
        @Bean
        public ErrorProperties errorProperties(){
            return new ErrorProperties();
        }
    }
    





  • 相关阅读:
    HTML a标签的href 属性 tel 点击可以直接拨打电话 ( 移动端 )
    【集群实战】NFS网络文件共享服务3-相关知识补充(showmount,exports,rpc)
    【集群实战】NFS网络文件共享服务2-mount挂载(参数,优化)
    Linux发送邮件命令mail,mutt
    【集群实战】NFS服务常见故障排查和解决方法
    【集群实战】NFS网络文件共享服务
    【集群实战】Rsync试题-异机数据备份解决方案
    【集群实战】Rsync常见错误总结
    【集群实战】Rsync数据同步工具
    【shell】Shell变量基础及深入
  • 原文地址:https://www.cnblogs.com/tilv37/p/9354137.html
Copyright © 2011-2022 走看看