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

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

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

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

 <script src="../static/statics/js/jquery-2.1.1.js" th:src="@{/statics/js/jquery-2.1.1.js}"></script>

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

 //配置访问权限的路径
LinkedHashMap<String , String> filterChainDefinitionMap = new LinkedHashMap<>() ;
//过滤静态文件请求
filterChainDefinitionMap.put("/static/**" , "anon") ;
//过滤访问swagger请求
filterChainDefinitionMap.put("/swagger-resources/**" , "anon") ;
filterChainDefinitionMap.put("/v2/api-docs/**" , "anon") ;
filterChainDefinitionMap.put("/webjars/**" , "anon") ;
filterChainDefinitionMap.put("/swagger-ui.html" , "anon") ;
//过滤登录请求
filterChainDefinitionMap.put("/login.html" , "anon") ;
filterChainDefinitionMap.put("/login" , "anon") ;
filterChainDefinitionMap.put("/doLogin" , "anon") ;
//过滤默认访问界面请求
filterChainDefinitionMap.put("/" , "anon") ;
//过滤注销请求
filterChainDefinitionMap.put("/logout*" , "anon") ;
//对页面访问进行拦截验证
filterChainDefinitionMap.put("/*.html" , "authc") ;
filterChainDefinitionMap.put("/*" , "authc") ;
filterChainDefinitionMap.put("/**" , "authc") ;
filterChainDefinitionMap.put("/*.*" , "authc") ;
bean.setFilterChainDefinitionMap(filterChainDefinitionMap) ;
return bean ;

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

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

 //配置访问权限的路径
LinkedHashMap<String , String> filterChainDefinitionMap = new LinkedHashMap<>() ;
//过滤静态文件请求
filterChainDefinitionMap.put("/statics/**" , "anon") ;
//过滤访问swagger请求
filterChainDefinitionMap.put("/swagger-resources/**" , "anon") ;
filterChainDefinitionMap.put("/v2/api-docs/**" , "anon") ;
filterChainDefinitionMap.put("/webjars/**" , "anon") ;
filterChainDefinitionMap.put("/swagger-ui.html" , "anon") ;
//过滤登录请求
filterChainDefinitionMap.put("/login.html" , "anon") ;
filterChainDefinitionMap.put("/login" , "anon") ;
filterChainDefinitionMap.put("/doLogin" , "anon") ;
//过滤默认访问界面请求
filterChainDefinitionMap.put("/" , "anon") ;
//过滤注销请求
filterChainDefinitionMap.put("/logout*" , "anon") ;
//对页面访问进行拦截验证
filterChainDefinitionMap.put("/*.html" , "authc") ;
filterChainDefinitionMap.put("/*" , "authc") ;
filterChainDefinitionMap.put("/**" , "authc") ;
filterChainDefinitionMap.put("/*.*" , "authc") ;
bean.setFilterChainDefinitionMap(filterChainDefinitionMap) ;
return bean ;

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

        <resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.html</include>
<include>**/*.js</include>
<include>**/*.css</include>
<include>**/*.png</include>
<include>**/*.ico</include>
</includes>
<filtering>false</filtering>
</resource>

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

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

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

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

如:

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

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

  <!--读取配置文件-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.html</include>
<include>**/*.js</include>
<include>**/*.css</include>
<include>**/*.png</include>
<include>**/*.ico</include>
</includes>
<filtering>false</filtering>
</resource> <resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.html</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>

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

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

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

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

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

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

最新文章

  1. (转)C++语言的15个晦涩特性
  2. 英雄联盟网络测速 v1.3 全服全区取延时+取服务器维护状态+机房地理位置
  3. uva 1584.Circular Sequence
  4. Tkinter教程之Toplevel篇
  5. python 3 处理HTTP 请求的包
  6. 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理
  7. 简单的socket方法
  8. ADO.NET 参数化查询
  9. Javaweb 项目内所有页面都是404问题
  10. React state和props使用场景
  11. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践
  12. Linux----------mysql基础
  13. [转]PHP开发者必须了解的工具—Composer
  14. trivial and nontrivial
  15. Unity3D学习笔记(二十七):MVC框架下的背包系统(2)
  16. ArcGIS自定义工具箱-自增字段(可以设置初始值和步长)
  17. test面板1
  18. 解决华为手机图片选择无效及产生的open failed: EACCES (Permission denied)错误
  19. maven打包出错: Failed to clean project: Failed to delete
  20. 转载:Why using Single Root I/O Virtualization (SR-IOV) can help improve I/O performance and Reduce Costs

热门文章

  1. Linux磁盘空间满的诡异问题解决方案
  2. Selenium处理alert/confirm/prompt提示框
  3. iOS炫酷动画图案、多种选择器、网络测速、滑动卡片效果等源码
  4. LG_2967_[USACO09DEC]视频游戏的麻烦Video Game Troubles
  5. 常用的GIT
  6. 用go写爬虫服务并发请求,限制并发数
  7. 12款优秀的 JavaScript 日历和时间选择控件
  8. sshd启动故障“Failed to start OpenSSH Server daemon ”解决方法
  9. OpenWrt Web 开发 LuCI框架 lua语言
  10. make的使用和Makefile规则和编程及其基本命令(简单)