SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

news/2024/10/30 13:38:37/

小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场景的开发,比如web开发场景、mybatis开发场景、Redis开发场景....

SpringBoot web相关配置:静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理

  • SpringBoot web相关配置
  • 1 静态资源访问
    • 1.1 配置自定义静态资源路径
  • 2 统一异常处理
    • 2.1 自定义全局处理异常
  • 3 文件上传
  • 4 拦截器
  • 5 统一跨域请求处理

SpringBoot web相关配置

1 静态资源访问

Springboot工程的静态资源约定(默认)要求放在如下目录

resource

​ —/static

​ — /public

​ —/resources

​ —/META-INF/resources

优先级顺序 /META-INF/resources >>> resources >>> static >>> public

1.1 配置自定义静态资源路径

基于配置类的方式

@Configuration   // 表示当前类是一个配置类
public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/imag/**")//浏览器资源访问路径.addResourceLocations("classpath:/images/"); //映射本地资源路径}
}

基于配置文件的方式

spring:mvc:static-path-pattern: /images/**resources:static-locations: classpath:/images/

2 统一异常处理

SpringBoot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。

2.1 自定义全局处理异常

走视图解析器的配置

  • advice 底层是AOP技术 报错之后,在不修改Controller层的基础之上做增强
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public String exceptionHandle(HttpServletRequest request, Exception e){return "errorPage";}@ExceptionHandler(NullPointerException.class)public String exceptionHandle1(HttpServletRequest request, Exception e){//可根据不同的异常做出不同的处理return "errorPage1";}
}

前后端分离的配置(返回json数据)

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)@ResponseBodypublic ResultData exceptionHandle(HttpServletRequest request, Exception e){return new ResultData(101,"出错啦!!");}@ExceptionHandler(NullPointerException.class)@ResponseBodypublic ResultData exceptionHandle1(HttpServletRequest request, Exception e){//可根据不同的异常做出不同的处理return new ResultData(101,"出错啦111!!");}
}

3 文件上传

后端Controller

注意:如果这个方法不加@ResponseBody 那么就会走视图解析器,会404

@Controller
public class UploadController {@RequestMapping("upload")//注意:如果这个方法不加@ResponseBody   那么就会走视图解析器,会404@ResponseBodypublic ResultData upload(@RequestParam("file")  MultipartFile file) throws IOException {try {String originalFilename = file.getOriginalFilename();String ext = originalFilename.substring(originalFilename.lastIndexOf("."));String filename = UUID.randomUUID().toString().replace("-","")+ext;file.transferTo(new File("D:\\workspace\\upload\\"+filename));} catch (Exception e) {e.printStackTrace();return new ResultData(100,"上传失败");}return new ResultData(0,"上传成功");}
}

文件上传配置(非必须配置)

spring:servlet:multipart:# 单个上传文件大小(默认1MB)max-file-size: 2MB# 总上传文件大小(默认10MB)max-request-size: 20MB

使用postman测试

springboot内置tomcat中配置外部访问路径

@Configuration
public class MyWebConfig implements WebMvcConfigurer {//添加虚拟路径,相同于通过一个路径来访问本地磁盘上的内容@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/upload/**").addResourceLocations("file:D:\\workspace\\upload\\");}
}

4 拦截器

定义拦截器

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession();Object loginUser = session.getAttribute("loginUser");if(loginUser == null){//登录失败跳转到登录页面response.sendRedirect(request.getContextPath()+"/login.html");return false;}return true;//登录成功放行}
}

配置拦截器

  • 添加拦截器
  • 定义拦截器的路径
  • 定义排除拦截的路径
@Configuration
public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()) //添加拦截器.addPathPatterns("/**")  //定义拦截的路径.excludePathPatterns("/images");  //定义排除拦截的路径}
}

5 统一跨域请求处理

统一的跨域处理

@Configuration
public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*").allowedHeaders("*").allowCredentials(true).allowedMethods("*");}
}@Configuration  //表示当前类是一个配置类
public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/img/**").addResourceLocations("classpath:/images/");registry.addResourceHandler("/tupian/**").addResourceLocations("file:D:\\workspace\\upload\\");}@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")   //请求的资源  /**表示所有资源 、.allowedOrigins("*")    //允许指定的源能访问//  .allowedOriginPatterns("*")//允许的请求地址  一般不需要.allowedHeaders("*")    //允许携带的请求头.allowedMethods("*");    //允许的请求方式//.allowCredentials(true) //允许是否携带cookie//注意:当设置允许携带Cookie不允许将指定源设置为所有}
}

http://www.ppmy.cn/news/58702.html

相关文章

两分钟成为 ChatGPT 国内高手【不要再拿ChatGPT当百度用了】

不要再问ChatGPT那些问百度的问题了,有更进阶的用法 更高效的编写prompts,以便ChatGPT给出更精准的回答 但是需要注意的是:国内现在根本没有GPT-4使用,但凡是说有GPT-4的都是骗子。 GPT 可以写文章,可以写诗&#x…

JSP+SQL基于JSP的学生信息管理系统(源代码+论文+答辩PPT)

随着学校规模的不断扩大,学生数量急剧增加,有关学生的各种信息也成倍增长。面对如此庞大的信息量,开发学生信息管理系统来提高学生管理工作的效率就成为必然。通过该系统,可以做到信息的规范管理、科学统计和快速查询,…

【web基础】html常用标签+作品展示

前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 说明:此部分是java web基础知识&a…

IDEA部署tomcat项目

文章目录 只是部署一下看到这里即可war和war exploded的区别warwar exploded update的动作update resourcesupdate classes and resourcesredeployrestart server 解决了拿到了一个tomcat项目后如何将它部署到IDEA里面的问题。 file->open 选中pom.xml并open as project …

【UE】坦克开火

1. 添加开火的操作映射 2. 创建一个actor蓝图类,添加一个静态网格体组件 添加发射物移动组件 设置初始速度和最大速度 发射物重力范围设为0.05 添加音频组件 设置音效 3. 打开炮管的静态网格体 在插槽管理器中创建插槽 将创建的插槽放到炮口位置 4. 打开“BP_BaseT…

【SQL】面试篇之排序和分组练习

1587 银行账户概要 II 1587题目 # Write your MySQL query statement below select name, balance from (select u.account, name, sum(amount) as balancefrom Users uleft join Transactions ton u.account t.accountgroup by u.account ) temp where balance > 10000总…

rockchip rk3568 openwrt修改根文件系统分区

rk3568的openwrt根文件系统分区大小如何修改? 1、rootfs大小取决于rk356x_config的配置,默认CONFIG_TARGET_ROOTFS_PARTSIZE512,如果需要修改2G,CONFIG_TARGET_ROOTFS_PARTSIZE2048,单位Mb。 2、修改parameter.txt。 …

【Spring Security】| 从0到1编写一个权限认证 | 学会了吗?

目录 一. 🦁 认证前的工作1. 添加依赖2. 创建数据库表(数据自行添加)3. 编写用户实体类4. 编写Dao接口5. 在启动类中添加 MapperScan 注解6. 继续添加各种包 二. 🦁 自定义逻辑认证原理—UserDetailsService三. 🦁 数据…