踩坑:SpringBoot2.0+中的拦截器会拦截静态资源的原因及解决方案

1. 此坑的背景

        说到这个坑,来得挺机缘巧合的。当时老师带着我们做springboot项目时,因为涉及到了登录权限的问题,所以,就带着我们写了个登录拦截器。这一写,导致我整个springboot项目中的静态资源全都无法访问。当时,看着老师的项目是能够正常访问的,所以,当我出现这个问题时,我并没有考虑到是拦截器的原因。趁此机会,我就适当地去了解下SpringBoot对静态资源的处理。说实话,这个问题折腾了我一个下午,这确实令人有点抓狂,好在这个问题最终被解决了。在此,记录一下。

2. SpringBoot1.5.x

        SpringBoot2.0+与SpringBoot1.5.x之间还是存在许多差别的。可以看看这篇博文------Spring Boot1.5X升级到2.0指南,说不定对你有帮助。

        在SpringBoot1.5.x中,放在resources/static目录下的静态资源可以被直接访问的,并且访问路径不需要带上“static”。如果,你还不太清楚springboot对静态资源的处理,可以查看这篇博文 SpringBoot对静态资源映射的处理

        即使给此版本的springboot项目添加拦截器,请求静态资源时,也不会被拦截。因为我比较懒,在此处就不给出相应的例子了。(下面有)

3. SpringBoot2.0+

添加拦截器:

        要想实现登录拦截,可以使用SpringMVC中的拦截器。类似于Servlet中的过滤器

@Component
public class UserLoginInterceptor implements HandlerInterceptor {
   

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
        User user = (User)request.getSession().getAttribute("user");
        if (StringUtils.isEmpty(user)) {
   
            response.sendRedirect("/login.html");
            return false;
        }
        return true;
    }
}

        新建一个类UserLoginInterceptor并实现了HandlerInterceptor接口(里面的三个方法均为jdk8中的新特性----默认方法),重写了preHandle()方法。如果用户已登录,则放行;否则,重定向到登录页面login.html

        preHandle(): 在请求时,进入到Controller中的方法之前进行调用preHandle()方法。如果返回true,继续访问Controller中的方法;否则,终止请求。
        具体的内容可以查看: 处理器拦截器(HandlerInterceptor)详解

注册拦截器:

        仅仅写了个登录拦截器并通过IOC注入到Spring容器中还不行,必须通过一个配置类进行配置此拦截器,才能生效。此配置类需要实现一些规范接口。它可以实现WebMvcConfigurer接口,或者继承WebMvcConfigurationSupport类。WebMvcConfigurerAdapter类已经被废弃了

配置类:

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
   
    @Autowired
    private UserLoginInterceptor userLoginInterceptor;


    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
   
        // 1.注册拦截器
        InterceptorRegistration interceptor = registry.addInterceptor(userLoginInterceptor);
        // 2. 配置拦截规则
        interceptor
                .a
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值