SpringBoot的Web开发入门案例7—WebMvcConfigurer配置类
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 方法用于配置拦截器。主要用途有:进行用户登录状态的拦截,日志的拦截等。
以用户登录状态的拦截为例:
- 修改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";}}
- 创建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;}
}
- 在MyWebMvcConfig类中重写addInterceptors方法,添加登录拦截器LoginInterceptor:
@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加拦截器并排除无需拦截的路径String[] excludePaths = {"/toLogin","/webjars/**","/login"};registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(excludePaths);}
该拦截器需要排除对"/toLogin","/webjars/**","/login"这三个请求路径的拦截。
- 重启项目,在未登录的状态下直接访问:http://localhost:9000/toLogin,将会被拦截跳转至登录页面。
补充:
addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
addPathPatterns:用于设置拦截器的过滤路径规则
addPathPatterns("/")**:指对所有请求都拦截
excludePathPatterns:用于设置不需要拦截的过滤规则
SpringBoot的Web开发入门案例7—WebMvcConfigurer配置类相关推荐
- SpringBoot的Web开发入门案例1
SpringBoot的Web开发入门案例1-登录和页面数据遍历读取 新建maven项目:logintest pom.xml文件: <project xmlns="http://mave ...
- SpringBoot的Web开发入门案例2—国际化
SpringBoot的Web开发入门案例2-国际化 改造logintest项目:SpringBoot的Web开发入门案例1 地址:https://blog.csdn.net/BLU_111/artic ...
- SpringBoot的Web开发入门案例9—数据访问
SpringBoot的Web开发入门案例9-数据访问 创建一个springboot项目(打包方式为jar包): 勾选Spring Web选项,勾选JDBC API和MySQL Driver pom文件 ...
- SpringBoot的Web开发入门案例3—异常处理
SpringBoot的Web开发入门案例3-异常处理 SpringBoot 默认404界面(由org.springframework.boot.autoconfigure.web.ErrorMvcAu ...
- SpringBoot的Web开发入门案例6—替换默认容器Tomcat
SpringBoot的Web开发入门案例6-替换默认容器Tomcat为Jetty Spring Boot默认是使用Tomcat作为内嵌的Servlet容器的,如需修改为Jetty,只要修改pom文件即 ...
- SpringBoot的Web开发入门案例5—注册Servlets, Filter, Listener
SpringBoot的Web开发入门案例5-注册Servlets, Filter, Listener 注册Servlet 创建MyServlet类 package com.blu.conf;impor ...
- SpringBoot的Web开发入门案例8—支持jsp
新建springboot工程:springboot_jsp,打包方式为war 导入web模块: 生成的项目结构: 包含启动类SpringbootJspApplication: package com. ...
- AOP配置开发入门案例
该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...
- Springboot的web开发-静态资源
1.web开发简介 SpringMVC自动配置概览 Spring Boot provides auto-configuration for Spring MVC that works well wit ...
最新文章
- 一个打印机的希奇古怪的问题二
- eclipse启动报JVM terminated. Exit code=-1的解决方法
- HTTP/1问题和HTTP/2解决思路
- 来个“云”毕业典礼,这些装扮太硬核了!
- 大数据技术 学习之旅_如何开始您的数据科学之旅?
- 7-2 最大流 加强版 (20 分)
- java 反编译 在线_「java反编译工具」分享java反编译工具,超级好用 - seo实验室...
- go语言 gosched
- 在远程登录时绕过SSL验证的方法
- 单片机定时报警C语言程序,单片机控制的简易定时报警器电路设计( - 控制/MCU - 电子发烧友网...
- 侯捷 - C++ Startup 揭密:C++ 程序的生前和死后 (二)
- FOC和SVPWM的C语言代码实现
- 企业微信机器人python脚本执行报错-‘errcode‘: 40008, ‘errmsg‘: ‘Warning: wrong json format. invalid message type
- 东软始业教育结业考试
- 屏蔽【CSDN站内搜索聚合】,百度搜索结果过滤【CSDN已经为您找到】
- 【面试】浪潮第一次技术面试过程
- golang 打桩,mock 数据怎么玩?
- DLNA - 一个伟大的方式来享受流媒体电影在首页
- 勇往直前的菜鸟修炼手册
- Parallel Platform (Stewart Platform) 类型机械臂的正逆解 01