SpingBoot自定义实现WebMvcConfigurer的一些用法参考

先上代码,后面细说

import com.seckill.handler.LoginHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

import javax.annotation.Resource;

/**
 * Mvc配置类
 * @author: ty
 * @create: 2021-02-05 21:06
 **/
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Resource
    private LoginHandler loginHandler;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册登录拦截器,这里添加你的拦截器(注意要么上面用@Resource依赖注入,要么new一个)
        InterceptorRegistration registration = registry.addInterceptor(loginHandler);
        //这里添加拦截地址,/**表示拦截所有地址
        registration.addPathPatterns("/**");
        //这里添加排除地址不拦截,一般就是登录地址、静态资源(重要)需要排除
        registration.excludePathPatterns(
                "/login/**",
                "/static/**"
        );
    }
    /**
     *静态资源
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //添加静态资源访问地址,比如访问路径为“/static/js/test.js”等
        registry.addResourceHandler("/static/**")
            //添加本地资源实际存放的位置,这里表示存放地址一般就在/src/main/resource下的static文件夹
                .addResourceLocations("classpath:/static/");
    }

    @Override
    /**
     *视图路径
     */
    public void addViewControllers(ViewControllerRegistry registry) {
        //这里表示,你访问“/”这个地址会跳到login.html这个页面
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/login/toLogin").setViewName("login");
    }
}
配置拦截器

比如常用的登录拦截器,有些页面必须访问过后才能访问,你就能在这里统一配置哪些地址需要拦截

1.创建拦截器,实现HandlerInterceptor接口,该接口有好几种方法,可以点进去查看它的定义,简单使用如下

@Component
public class LoginHandler implements HandlerInterceptor{
    @Resource
    StringRedisTemplate stringRedisTemplate;

    /**
     * 在请求处理之前进行调用(Controller方法调用之前)
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws IOException {
      //这里进行是否登录的判断,return true那么就继续运行,false就不会跳转到相应的url
      //如果需要跳转的登录界面,可以直接写
      //response.sendRedirect(request.getContextPath()+"/login/toLogin");
    }
}

2.见上述代码第一个方法,注册拦截器并配置拦截地址,注意第二个的静态资源配置(重要),需要排除静态资源,不然你把css等也拦截了就页面就没样式了。

静态资源配置

对于SpringBoot2.x版本来说,如果自定义实现了WebMvcConfigurer,那么一些默认的配置会失效,其中最重要的就是静态资源的访问路径。所以自己配置静态资源的访问路径和地址,不然会出现你的页面没有样式的情况。

另外需要在你的拦截器中排除你设置的静态资源访问路径

视图路径

视图就是你放在templates文件下的页面,一般我们像这样在controller设置页面路径

@RequestMapping("/goodsDetail")
    public ModelAndView toGoodsDetail(){

如果你没有其他代码逻辑,就只是配置个访问路径,那就可以在上述第三个方法中配置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值