SpringMVC——WebMvcConfigurer

发布时间 2023-10-07 13:58:25作者: xiaogh

WebMvcConfigurer 是 Spring MVC 提供的一个接口,允许你自定义 Spring MVC 的配置。通过实现这个接口,你可以注册拦截器添加视图控制器配置视图解析器等,以满足你的应用程序特定需求。这个接口提供了多个回调方法,你可以选择性地实现这些方法。

WebMvcConfigurer 接口的主要方法如下:

1、addInterceptors用于注册拦截器。你可以通过该方法添加自定义拦截器,拦截器可用于在请求处理之前或之后执行一些操作。

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LoginInterceptor())
            .addPathPatterns("/**")    // 对所有请求应用拦截器
            .excludePathPatterns("/login", "/register");    // 排除登录和注册页面
}

 LoginInterceptor类

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 在请求处理之前进行登录验证
        // 这里可以检查用户是否已登录,例如检查 session 中是否有登录信息
// 示例:假设登录信息存储在 session 的 "user" 属性中 Object user = request.getSession().getAttribute("user"); if (user == null) { // 用户未登录,重定向到登录页面 response.sendRedirect("/login"); return false; // 中断请求,不继续执行 } // 用户已登录,允许请求继续执行 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 请求处理之后,渲染视图之前的操作 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 请求处理完成后的操作 } }

2、addViewControllers:用于注册简单的视图控制器。通过该方法,你可以直接将一个 URL 映射到视图名称,而无需编写控制器方法。

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/home").setViewName("home");
    registry.addViewController("/login").setViewName("login");
}

3、configureViewResolvers:用于配置视图解析器。通过该方法,你可以配置视图解析器,以决定如何解析视图名称。

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    registry.jsp("/WEB-INF/views/", ".jsp");
}

4、addResourceHandlers用于配置静态资源处理。通过该方法,你可以添加处理静态资源的处理程序。

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/public-resources/");
}

5、configureDefaultServletHandling配置静态资源的处理。通过该方法,你可以启用或禁用默认的 Servlet 处理静态资源。

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

6、addCorsMappings配置跨域资源共享。

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/api/**")
            .allowedOrigins("https://example.com")
            .allowedMethods("GET", "POST")
            .maxAge(3600);
}

7、configurePathMatch用于配置路径匹配规则。

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseSuffixPatternMatch(false)
              .setUseTrailingSlashMatch(true);
}

 8、configureContentNegotiation:用于配置内容协商策略。

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.favorPathExtension(false)
              .favorParameter(true)
              .parameterName("format")
              .ignoreAcceptHeader(true)
              .useJaf(false)
              .defaultContentType(MediaType.APPLICATION_JSON)
              .mediaType("xml", MediaType.APPLICATION_XML);
}

这是 WebMvcConfigurer 接口的一小部分,实际上它还提供其他方法,允许程序员更详细地配置 Spring MVC 的行为。