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{
	
	/**
	 * 配置请求路径和页面的映射
	 */

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

}


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

	@Override
	public 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目录下,再通过该方法的配置:

	@Override
	public 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{
	@Override
	public 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:
@Override
	public 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:用于设置不需要拦截的过滤规则

发布了20 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/BLU_111/article/details/105588450