springboot页面加载时找不到静态资源下的文件,js与css以及图片,拦截器
最近在使用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实现拦截与放行功能,我写一起了,可根据需要删除部分内容
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
uni-app自定义Modal弹窗|alert对话框|Toast提示
uniApp自定义模态弹窗模板uniPop,实现了uniapp仿微信、android、ios弹窗效果,msg信息框/confirm确认框 uniPop内置多种动画效果、可供选择类型ios/android、可以自定义弹窗样式/自定义多按钮及事件/弹窗显示位置、自动关闭秒数、遮罩层透明度及点击遮罩是否关闭 如下图:H5/小程序/App三端效果兼容性一致。(后续大图均展示App端) 引入方式uniPop.vue弹窗组件两种引入方式:1、在main.js里引入全局组件import uniPop from './components/uniPop/uniPop.vue'Vue.component('uni-pop', uniPop)2、在页面引入组件 <template> <view class="container"> ... <!-- 弹窗模板 --> <uni-pop ref="uniPop"></uni-pop> </view> </template> <script> import uniP...
- 下一篇
Android studio如何连接三星手机
打开Android studio,选择Trouble Shoot device connections: 这个菜单项会自动扫描本地已经用USB线连接的设备: 已经成功扫描出了我的Galaxy C7 Pro手机: Restart ADB server: 成功识别出来了: 手机上选择Yes: 现在Android studio里运行一个Activity,顺利安装到我的三星手机上了: 本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果