SpringBoot的Web开发入门案例7—WebMvcConfigurer配置类


WebMvcConfigurer接口的几个常用方法:

  • addViewControllers:配置请求路径和页面的映射(页面跳转)
  • addResourceHandlers:添加静态资源文件映射
  • addInterceptors:添加拦截器

WebMvcConfigurer配置类是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架的个性化配置

使用方法
创建MyWebMvcConfig配置类,该类需继承 WebMvcConfigurer 接口。

package com.blu.conf;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import com.blu.interceptor.LoginInterceptor;@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer{/*** 配置请求路径和页面的映射*/@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/toLogin").setViewName("login");}/*** 添加静态资源文件映射* 默认的静态资源文件都必须放在resources/static/目录下才可以访问* 通过重写该方法,resources/img下的资源文件就可以访问了* 该配置与框架中的自定义配置不冲突,两者会同时有效。*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/img/**").addResourceLocations("classpath:/img/");}/*** 配置拦截器* */@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加拦截器并排除无需拦截的路径String[] excludePaths = {"/toLogin","/webjars/**","/login"};registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(excludePaths);}}

addViewControllers 方法实现请求路径和页面的映射:

 @Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/toLogin").setViewName("login");}

该方法与Controller类中的以下方法等价:

 @GetMapping("/toLogin")public String toLogin() { return "login";}

addResourceHandlers 方法用于添加静态资源文件的映射,在SpringBoot的Web开发入门案例1中,main.html 页面中的图片必须放在 resources/static 目录下才可以访问到。
将案例1中的static目录下的img文件夹及子图片文件直接移至resources目录下,再通过该方法的配置:

 @Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/img/**").addResourceLocations("classpath:/img/");}

main.html就可以访问图片资源文件了。

注:
addResoureHandler:指的是对外暴露的访问路径
addResourceLocations:指的是内部文件放置的目录
即,通过/img/**请求可访问到classpath下的img文件夹中的文件。


addInterceptors 方法用于配置拦截器。主要用途有:进行用户登录状态的拦截,日志的拦截等。

以用户登录状态的拦截为例:

  1. 修改Controller类中的login方法,添加保存用户名Session的逻辑:
 @PostMapping("/login")public String login(String loginName,String password, Model model, HttpSession session) {if(loginName.equals("admin")&&password.equals("123456")) {session.setAttribute("user", loginName);return "redirect:/main";}else {model.addAttribute("errorMsg","用户名或密码错误");return "login";}}
  1. 创建LoginInterceptor拦截器类:
package com.blu.interceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.web.servlet.HandlerInterceptor;public class LoginInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {//获取session中用户的信息HttpSession session = request.getSession();String uname = (String) session.getAttribute("user");if(uname==null) {response.sendRedirect("/toLogin");return false;}return true;}
}
  1. 在MyWebMvcConfig类中重写addInterceptors方法,添加登录拦截器LoginInterceptor:
@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加拦截器并排除无需拦截的路径String[] excludePaths = {"/toLogin","/webjars/**","/login"};registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(excludePaths);}

该拦截器需要排除对"/toLogin","/webjars/**","/login"这三个请求路径的拦截。

  1. 重启项目,在未登录的状态下直接访问:http://localhost:9000/toLogin,将会被拦截跳转至登录页面。

补充:
addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
addPathPatterns:用于设置拦截器的过滤路径规则
addPathPatterns("/")**:指对所有请求都拦截
excludePathPatterns:用于设置不需要拦截的过滤规则

SpringBoot的Web开发入门案例7—WebMvcConfigurer配置类相关推荐

  1. SpringBoot的Web开发入门案例1

    SpringBoot的Web开发入门案例1-登录和页面数据遍历读取 新建maven项目:logintest pom.xml文件: <project xmlns="http://mave ...

  2. SpringBoot的Web开发入门案例2—国际化

    SpringBoot的Web开发入门案例2-国际化 改造logintest项目:SpringBoot的Web开发入门案例1 地址:https://blog.csdn.net/BLU_111/artic ...

  3. SpringBoot的Web开发入门案例9—数据访问

    SpringBoot的Web开发入门案例9-数据访问 创建一个springboot项目(打包方式为jar包): 勾选Spring Web选项,勾选JDBC API和MySQL Driver pom文件 ...

  4. SpringBoot的Web开发入门案例3—异常处理

    SpringBoot的Web开发入门案例3-异常处理 SpringBoot 默认404界面(由org.springframework.boot.autoconfigure.web.ErrorMvcAu ...

  5. SpringBoot的Web开发入门案例6—替换默认容器Tomcat

    SpringBoot的Web开发入门案例6-替换默认容器Tomcat为Jetty Spring Boot默认是使用Tomcat作为内嵌的Servlet容器的,如需修改为Jetty,只要修改pom文件即 ...

  6. SpringBoot的Web开发入门案例5—注册Servlets, Filter, Listener

    SpringBoot的Web开发入门案例5-注册Servlets, Filter, Listener 注册Servlet 创建MyServlet类 package com.blu.conf;impor ...

  7. SpringBoot的Web开发入门案例8—支持jsp

    新建springboot工程:springboot_jsp,打包方式为war 导入web模块: 生成的项目结构: 包含启动类SpringbootJspApplication: package com. ...

  8. AOP配置开发入门案例

    该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...

  9. Springboot的web开发-静态资源

    1.web开发简介 SpringMVC自动配置概览 Spring Boot provides auto-configuration for Spring MVC that works well wit ...

最新文章

  1. 一个打印机的希奇古怪的问题二
  2. eclipse启动报JVM terminated. Exit code=-1的解决方法
  3. HTTP/1问题和HTTP/2解决思路
  4. 来个“云”毕业典礼,这些装扮太硬核了!
  5. 大数据技术 学习之旅_如何开始您的数据科学之旅?
  6. 7-2 最大流 加强版 (20 分)
  7. java 反编译 在线_「java反编译工具」分享java反编译工具,超级好用 - seo实验室...
  8. go语言 gosched
  9. 在远程登录时绕过SSL验证的方法
  10. 单片机定时报警C语言程序,单片机控制的简易定时报警器电路设计( - 控制/MCU - 电子发烧友网...
  11. 侯捷 - C++ Startup 揭密:C++ 程序的生前和死后 (二)
  12. FOC和SVPWM的C语言代码实现
  13. 企业微信机器人python脚本执行报错-‘errcode‘: 40008, ‘errmsg‘: ‘Warning: wrong json format. invalid message type
  14. 东软始业教育结业考试
  15. 屏蔽【CSDN站内搜索聚合】,百度搜索结果过滤【CSDN已经为您找到】
  16. 【面试】浪潮第一次技术面试过程
  17. golang 打桩,mock 数据怎么玩?
  18. DLNA - 一个伟大的方式来享受流媒体电影在首页
  19. 勇往直前的菜鸟修炼手册
  20. Parallel Platform (Stewart Platform) 类型机械臂的正逆解 01

热门文章

  1. FPGA与VerilogHDL的理解
  2. 百度回港上市AB面:掉队与翻盘?
  3. 去掉点击标签时页面出现的蓝色底纹
  4. 国际服qq登录服务器维护中,刺激战场国际服怎么登陆
  5. 2020年山东春季高考计算机人数,2020年山东高考录取人数公布
  6. 中秋手机大换新 这几部爆款可以入手了
  7. Swoole加速结巴分词
  8. Siemens Simcenter Flomaster 2021.1
  9. 【电商】淘宝发布全国特色农产品上行报告
  10. 2021-06-20-刘铁猛C#语言入门详解-学习笔记P20、21、22事件详解