博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于springboot1.5.9整合shiro时出现静态文件找不到的问题
阅读量:5776 次
发布时间:2019-06-18

本文共 5632 字,大约阅读时间需要 18 分钟。

开门见山吧,上午对shiro进行整合了下,因为之前使用ssm框架对shiro框架整合过,所以觉得使用springboot再次对shiro框架进行整合也是没啥问题,但最后整合完之后,使用thymeleaf模板对静态文件进行引入时,竟然出错了,然后按f12看了下错误,如下图:

一看到这种错误,给人第一感觉就是静态文件没有引入进来,所以我再点了sources检查是否引入了js文件,如下图:

这样一看,就感觉不对了,放在static下的静态文件竟然没有引入,再看下项目目录:

感觉没问题啊,然后再在login.html文件引入js的路径,按ctrl+鼠标左键试下能否进入jq文件中,试了后,可以啊,代码如下:

1 

而且我也是使用了thymeleaf模板方式,虽说引用路径的优先级是模板语法>html本身的引用方式,而且使用该语法,可以直接省略static文件夹路径的,当发现这些都没有问题之后,再次检查下shiroConfiguration类中对权限过滤的方式:

1 //配置访问权限的路径 2         LinkedHashMap
filterChainDefinitionMap = new LinkedHashMap<>() ; 3 //过滤静态文件请求 4 filterChainDefinitionMap.put("/static/**" , "anon") ; 5 //过滤访问swagger请求 6 filterChainDefinitionMap.put("/swagger-resources/**" , "anon") ; 7 filterChainDefinitionMap.put("/v2/api-docs/**" , "anon") ; 8 filterChainDefinitionMap.put("/webjars/**" , "anon") ; 9 filterChainDefinitionMap.put("/swagger-ui.html" , "anon") ;10 //过滤登录请求11 filterChainDefinitionMap.put("/login.html" , "anon") ;12 filterChainDefinitionMap.put("/login" , "anon") ;13 filterChainDefinitionMap.put("/doLogin" , "anon") ;14 //过滤默认访问界面请求15 filterChainDefinitionMap.put("/" , "anon") ;16 //过滤注销请求17 filterChainDefinitionMap.put("/logout*" , "anon") ;18 //对页面访问进行拦截验证19 filterChainDefinitionMap.put("/*.html" , "authc") ;20 filterChainDefinitionMap.put("/*" , "authc") ;21 filterChainDefinitionMap.put("/**" , "authc") ;22 filterChainDefinitionMap.put("/*.*" , "authc") ;23 bean.setFilterChainDefinitionMap(filterChainDefinitionMap) ;24 return bean ;

这样也没有发现错误,然后后面再次缕了一遍,并在浏览器控制台看一下source的路径, 发现静态资源的路径前面是没有static的, 因而shiro也不会放行,

因为springboot默认会将static目录中的内容做为classes根目录的内容发布到web服务器, 所以如果想要放行静态资源, 同时又要实现拦截/**请求,必须将过滤静态文件的请求的路径更改到statics文件下,如下所示:

1 //配置访问权限的路径 2         LinkedHashMap
filterChainDefinitionMap = new LinkedHashMap<>() ; 3 //过滤静态文件请求 4 filterChainDefinitionMap.put("/statics/**" , "anon") ; 5 //过滤访问swagger请求 6 filterChainDefinitionMap.put("/swagger-resources/**" , "anon") ; 7 filterChainDefinitionMap.put("/v2/api-docs/**" , "anon") ; 8 filterChainDefinitionMap.put("/webjars/**" , "anon") ; 9 filterChainDefinitionMap.put("/swagger-ui.html" , "anon") ;10 //过滤登录请求11 filterChainDefinitionMap.put("/login.html" , "anon") ;12 filterChainDefinitionMap.put("/login" , "anon") ;13 filterChainDefinitionMap.put("/doLogin" , "anon") ;14 //过滤默认访问界面请求15 filterChainDefinitionMap.put("/" , "anon") ;16 //过滤注销请求17 filterChainDefinitionMap.put("/logout*" , "anon") ;18 //对页面访问进行拦截验证19 filterChainDefinitionMap.put("/*.html" , "authc") ;20 filterChainDefinitionMap.put("/*" , "authc") ;21 filterChainDefinitionMap.put("/**" , "authc") ;22 filterChainDefinitionMap.put("/*.*" , "authc") ;23 bean.setFilterChainDefinitionMap(filterChainDefinitionMap) ;24 return bean ;

然后再试下,还是一样不行,再百度看下,检查项目的pom文件,发现没有读取静态文件,配置如下:

1        
2
src/main/resources
3
4
**/*.properties
5
**/*.xml
6
**/*.yml
7
**/*.html
8
**/*.js
9
**/*.css
10
**/*.png
11
**/*.ico
12
13
false
14

再次重启项目,并清除了浏览器的缓存后,对项目进行访问,发现已经将静态文件引入了:

写的有点乱,最后还是总结下吧,对于静态文件引入到thymeleaf模板中出现404没找到的错误,具体需要检查这几个方面:

1、检查引入的路径是否正确,检查路径是否正确,可以使用ctrl+鼠标左键,看看是否可以进入文件,如果可以,则表示路径正确

注意:使用thymeleaf模板语法引入的话,不需要加static;

如:

左边是普通引用,右边是使用thymeleaf模板语言进行引入,对比下就可以发现区别

2、检查pom文件中是否对配置文件夹下的文件进行读取,如下是我一个小案例的样板:

1  
2
3
4
src/main/resources
5
6
**/*.properties
7
**/*.xml
8
**/*.yml
9
**/*.html
10
**/*.js
11
**/*.css
12
**/*.png
13
**/*.ico
14
15
false
16
17 18
19
src/main/java
20
21
**/*.properties
22
**/*.xml
23
**/*.yml
24
**/*.html
25
26
false
27
28

因为静态文件都放置在resources/static下,所以对于js、css等引入只需在src/main/resources下写即可

3、检查项目中是否加了过滤器或拦截器,主要是检查它们是否对静态资源的路径进行过滤了,这个需要注意的。

4、检查项目是否整合了其他什么权限框架,比如shiro或spring security等,如果整合了,就需要检查下权限配置的代码中是否对静态文件进行过滤了,

需要注意的是,springboot默认会将static目录中的内容做为classes根目录的内容发布到web服务器, 所以如果想要放行静态资源, 同时又要实现拦截/**请求,

建议在static文件夹下再新建一个文件夹来存放静态资源文件,这样方便管理。

以上便是我上午使用springboot整合shiro时出现的一个粗心错误,有说的不恰当的地方可以及时提出!

 

转载于:https://www.cnblogs.com/mYunYu/p/10038297.html

你可能感兴趣的文章
嵌入式linux中使用 DHCP功能描述
查看>>
HTAP数据库 PostgreSQL 场景与性能测试之 24 - (OLTP) 物联网 - 时序数据并发写入(含时序索引BRIN)...
查看>>
说说搜索引擎中的人工干预
查看>>
关于Web安全的三个攻防姿势
查看>>
C 实现删除非空文件夹
查看>>
HBase学习总结(4):HBase的工作原理
查看>>
双11享Go了吗?2017阿里双11在线峰会续写科技盛宴!
查看>>
克服大数据集群的挑战
查看>>
有一台以上服务器 就有理由尝试云操作系统
查看>>
ISC公司提供的新服务,使飞康FreeStor的服务范围延伸至中小企业
查看>>
院士工作站揭牌仪式圆满成功,推动共享城市安全建设落地
查看>>
Linux下搭建MySQL集群
查看>>
物联网将让数据中心更为复杂,但更加有趣
查看>>
传Facebook研发新功能 发布合作媒体的专门内容
查看>>
美国国土安全部部长约翰逊就Dyn网络攻击事件发表声明
查看>>
《大数据原理:复杂信息的准备、共享和分析》一一2.6 单向哈希函数
查看>>
开放式网络是实现创新的快速通道
查看>>
《计算机网络课程设计(第2版)》——1.1节计算机网络课程的教学特点
查看>>
震惊!5分钟买到上千个银行卡密码!揭秘盗取银行卡信息三大方法....
查看>>
区块链与银行系统整合的关键一步是什么?资产代币化!
查看>>