springboot页面加载时找不到静态资源下的文件,js与css以及图片,拦截器

简介: 最近在使用springboot时,前几天正常访问的页面,突然间访问不到js、css、图片等静态资源。经过排查发现是由于我发现程序中提示webmvcconfigureradapter已过期,所以改成了WebMvcConfigurationSupport而WebMvcConfigurationSup...

最近在使用springboot时,前几天正常访问的页面,突然间访问不到js、css、图片等静态资源。经过排查发现是由于我发现程序中提示webmvcconfigureradapter已过期,所以改成了WebMvcConfigurationSupport

而WebMvcConfigurationSupport在 springboot的web自动配置类 WebMvcAutoConfiguration 上有条件注解,这个注解的意思是在项目类路径中缺少 WebMvcConfigurationSupport类型的bean时改自动配置类才会生效

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
 

所以当我们使用拦截器并继承WebMvcConfigurationSupport这个类的时候需要重写addInterceptors这个方法

所以拦截器的配置应该如下

代码1:

package com.example.syscloud.Interceptor;

import org.springframework.context.annotation.Bean;
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.WebMvcConfigurationSupport;

@Configuration
public class WebSecurityConfig extends WebMvcConfigurationSupport {

@Bean
public SessionInterceptor getSessionInterceptor() {
    return new SessionInterceptor();
}

@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
    super.addResourceHandlers(registry);
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
    /*调用我们创建的SessionInterceptor。
     * addPathPatterns("/**)的意思是这个链接下的都要进入到SessionInterceptor里面去执行
     * excludePathPatterns("/login")的意思是login的url可以不用进入到SessionInterceptor中,直接
     * 放过执行。
     * 注意:如果像注释那样写是不可以的。这样等于是创建了多个Interceptor。而不是只有一个Interceptor
     *
     * */
    SessionInterceptor sessionInterceptor=new SessionInterceptor();
    registry.addInterceptor(sessionInterceptor).addPathPatterns("/**")
            .excludePathPatterns("/user/login","/userAPI/login","/user/defaultKaptcha","/publicPage/login","/css/**","/js/**","/img/**","/static/**","/mapper/**");

    super.addInterceptors(registry);
}

}
代码2:

package com.example.syscloud.Interceptor;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.syscloud.bean.templeBean.UserTokenBean;
import com.example.syscloud.token.TokenUse;
import com.example.syscloud.unit.ReturnCode;
import com.example.syscloud.unit.ReturnData;
import com.example.syscloud.unit.UserTokenMap;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

public class SessionInterceptor implements HandlerInterceptor {

/*在执行Controller的任务之前判断是否有Session信息
  如果有Session信息就往下执行,去调用Controller。
  如果没有Session就跳转到登录页面
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    response.setCharacterEncoding("utf-8");
    String token=request.getHeader("token");
    String android=request.getHeader("android");
    if (token!=null){
        boolean bo= TokenUse.tokenVerify(token);
        int userid=TokenUse.getUserID(token);
        UserTokenBean userTokenBean =UserTokenMap.getMap(userid);
        if (userTokenBean!=null) {
            if (userTokenBean.getToken().equals(token) && bo) {
                Map<Integer,UserTokenBean> map=new HashMap<>();
                map=UserTokenMap.getMap();
                map.put(userid,userTokenBean);
                UserTokenMap.setMap(map);
                return true;
            }
        }
    }
    HttpSession session=request.getSession();
    if(session.getAttribute("LoginName")!=null){
        return true;
    }
    if(android!=null){
        ReturnData returnData=new ReturnData();
        returnData.setCode(ReturnCode.Timeout.value());
        returnData.setMessage(ReturnCode.Timeout.getDesc());
        String str=JSON.toJSONString(returnData);
        JSONObject jsonObject=JSON.parseObject(str);
        response.getWriter().print(jsonObject);
    }else {
       //拦截后返回的页面
        String url = "/publicPage/login";
        // response.sendRedirect(url);
        response.getWriter().print("<script>   top.window.location.href = '"+url+"?r='+Math.random() ;</script>");

    }
    return false;
}

@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 {

}

}
第二段代码是通过验证session与token实现拦截与放行功能,我写一起了,可根据需要删除部分内容

目录
相关文章
|
4天前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
29 13
|
26天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
1月前
|
数据采集 前端开发 JavaScript
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
本文介绍了如何使用 Puppeteer 结合 CSS 选择器抓取动态网页中的关键元素,以亚航网站的特价机票信息为例,通过设置代理 IP、User-Agent 和 Cookie 等技术手段,有效提升爬虫策略,实现高效、稳定的爬取。
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
|
13天前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
31 3
|
23天前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
48 7
|
24天前
|
JavaScript
jQuery+css3制作精美的2024圣诞节倒计时页面
jQuery+css3制作精美的2024圣诞节倒计时页面动画
20 0
jQuery+css3制作精美的2024圣诞节倒计时页面
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
1月前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
126 1
|
25天前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
17 0
下一篇
DataWorks