springboot2.x自定义拦截把static静态文件给拦截的坑
新人新帖,喷后请指正,谢谢
1.王中王,坑中坑
和很多人一样,我在springboo自定义配置登录拦截的时候,写一个WebConfig类继承WebMvcConfigureAdapter,重写AddResourceHandlers,然后乐呵呵的去实现HandlerInterceptor,在preHandle里写逻辑,然后访问登录页面,然后what a fuck,我登录页面的样式呢?怎么就几个框框了?满脸黑人问号?
项目目录:

properties配置的静态路径:spring.mvc.static-path-pattern=/resources/**
WebConfig里的静态文件配置和拦截配置如下:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 配置模板资源路径
registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/");
registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
} @Override
public void addInterceptors(InterceptorRegistry registry) {
// InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor());
// 不可以下面方式操作,如果那样写是不可以的。这样等于是创建了多个Interceptor。而不是只有一个Interceptor
// addInterceptor.excludePathPatterns("/login");
// addInterceptor.excludePathPatterns("/login/main");
// //拦截所有路径
// addInterceptor.addPathPatterns("/**");
// addPathPatterns("/**")对所有请求都拦截,但是排除了/login/main和/login请求的拦截
registry.addInterceptor(getSecurityInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login","/login/main");
} @Bean
public MyInterceptor getSecurityInterceptor() {
return new MyInterceptor();
}
/**
* 在controller之前执行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info("开始检测是否登录");
log.info(request.getRequestURL().toString());
// 判断是否已有该用户登录的session
if (request.getSession().getAttribute(SESSION_KEY) != null) {
log.info("用户已登录");
return true;
}
log.info("用户尚未登录");
// 跳转到登录页
response.sendRedirect(request.getContextPath() + "/login");
return false;
} @Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } @Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { }
打印请求地址输出后发现(log.info(request.getRequestURL().toString())),static下的静态页面都被拦截了,一脸懵逼加问号中。
2.解决办法
网上查了一大堆资料,都没有说到点子上的,之道后来发现原因竟然是:版本居然是:
spring boot 2.x已经改为最低支持jdk8版本,而jdk8中的接口允许有默认实现,所以已经废弃掉WebMvcConfigurerAdapter适配类,而改为直接实现WebMvcConfigurer接口。
以上信息来自==>https://my.oschina.net/dengfuwei/blog/1795346的帮助。
然后 WebConfig implements WebMvcConfigurer,是要实现啊WebMvcConfigurer。。。。。。然后修改一下拦截,注解只留@Configuration。
registry.addInterceptor(getSecurityInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login","/login/main","/static/**");
重启项目,访问:http://localhost:8080/login,完美

springboot2.x自定义拦截把static静态文件给拦截的坑的更多相关文章
- Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关
本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...
- django系列4.2--自定义标签, 自定义过滤器, inclusion_tag, 引入静态文件(css,js等)
项目的目录为 在app中创建templates时,最好要再创建一个app名相同的文件夹,因为项目找文件时从第一个app开始遍历,不同app内的同名文件会有冲突,所以这样处理 一.自定义标签和过滤器 1 ...
- 自定义过滤器和标签 & 静态文件相关
自定义过滤器和标签 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名 ...
- django关闭DEBUG后 static静态文件都访问不了
Django框架仅在开发模式下提供静态文件服务.当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供 ...
- Djanto static静态文件配置
django的settings中包含三个static相关设置项: STATIC_ROOT STATIC_URL STATICFILES_DIRS STATIC_URL 好理解,就是映射到静态文件的 ...
- Django下的templates 和 static静态文件
如果Django顶层目录中没有templates的话,就自己新建一个Directory ,这个文件是存放html文件的 1)如果在views里面用render(request,"" ...
- django 项目运行时static静态文件不能加载问题处理
一.首先检查网页中的加载路径是否正确,如果和文件所在路径不一致,就把html改下路径 二.加载路径和文件实际路径一致,看下配置文件: STATIC_URL = '/static/'STATIC_ROO ...
- springboot2.0+ 使用拦截器导致静态资源被拦截
在spring1.0+的版本中,配置拦截器后是不会拦截静态资源的.其配置如下: @Configuration public class WebMvcConfig extends WebMvcConfi ...
- python django 访问static静态文件
settings 文件配置: STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)PROJEC ...
随机推荐
- R数据挖掘 第一篇:聚类分析(划分)
聚类是把一个数据集划分成多个子集的过程,每一个子集称作一个簇(Cluster),聚类使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似,由聚类分析产生的簇的集合称作一个聚类.在相同的数据集上, ...
- Windows 10 更新补丁后Visual Studio 2017 运行项目出现错误
问题: 今天更新了Windows 10(版本 1709)推送最新补丁后,打开Visual Studio 2017运行Web项目,都出现“指定的参数超出有效值的范围 参数名:site”,如下图: 解决方 ...
- TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗
谢希仁版<计算机网络>中的例子: "已失效的连接请求报文段”的产生在这样一种情况下: client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误 ...
- PAT 1022D进制的A+B
PAT 1022D进制的A+B 输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B ...
- loadrunner总结
loadrunner总结 1.性能测试包含了哪些测试(至少举出3种) 负载测试,压力测试,疲劳强度测试,大数据量测试,并发测试. 2.负载测试和压力测试的区别 性能测试: 是通过自动化的测试工具模拟多 ...
- 使用Keepalived实现MySQL双主高可用
MySQL双主配置 环境准备: OS: CentOS7 master:192.168.1.10 backup:192.168.1.20 VIP:192.168.1.30 一.安装MySQL数据库. 在 ...
- Linux自有服务(1)-Linux从入门到精通第五天(非原创)
文章大纲 一.运行模式二.用户与用户组管理(重点)三.网络设置四.ssh服务(重点)五.学习资料下载六.参考文章 自有服务,即不需要用户独立去安装的软件的服务,而是当系统安装好之后就可以直接使用的 ...
- 安装Ubuntu后需要做的事
卸载软件 纸牌 麻将 扫雷 数独 火狐 邮件 扫描 拍照 照片 视频 计划 日历 打印 备份 计算器 亚马逊 电源统计 音乐播放 远程桌面 To Do LibreOffice 换下载源 装机的时候下载 ...
- linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间
转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...
- Springboot测试类之@RunWith注解
@runWith注解作用: --@RunWith就是一个运行器 --@RunWith(JUnit4.class)就是指用JUnit4来运行 --@RunWith(SpringJUnit4ClassRu ...