开门见山吧,上午对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时出现的一个粗心错误,有说的不恰当的地方可以及时提出!

基于springboot1.5.9整合shiro时出现静态文件找不到的问题的更多相关文章

  1. springboot2.0整合shiro出现ShiroDialect报错 找不到org/thymeleaf/processor/attr/AbstractTextChildModifierAttrPr

    包版本过低,找最新包 https://mvnrepository.com/ <dependency> <groupId>com.github.theborakompanioni ...

  2. Django学习之天气调查实例(3):部署静态文件CSS、JS、images等(部署环境基于Ubuntu)

    在设计登录界面时,采用了网上下载的登录模板,漂亮,简易.但是在测试和部署时,发现原来模板中采用的js文件和css文件,却着实让我折腾了好几天. 在以往的网页设计中,一般只要把测试站点开启后,网页中的静 ...

  3. SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建

    SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...

  4. SpringMVC整合Shiro——(3)

    SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...

  5. Spring整合Shiro做权限控制模块详细案例分析

    1.引入Shiro的Maven依赖 <!-- Spring 整合Shiro需要的依赖 --> <dependency> <groupId>org.apache.sh ...

  6. Spring整合Shiro并扩展使用EL表达式

    Shiro是一个轻量级的权限控制框架,应用非常广泛.本文的重点是介绍Spring整合Shiro,并通过扩展使用Spring的EL表达式,使@RequiresRoles等支持动态的参数.对Shiro的介 ...

  7. 补习系列(6)- springboot 整合 shiro 一指禅

    目标 了解ApacheShiro是什么,能做什么: 通过QuickStart 代码领会 Shiro的关键概念: 能基于SpringBoot 整合Shiro 实现URL安全访问: 掌握基于注解的方法,以 ...

  8. spring boot整合shiro后,部分注解(Cache缓存、Transaction事务等)失效的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/elonpage/article/details/78965176 前言 整合有缓存.事务的sprin ...

  9. SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能

    SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...

随机推荐

  1. python关于文件操作

    今日所得 文件操作模式的补充 文件光标的移动控制 截断文件 修改文件 函数的简单介绍 文件操作模式的补充 """ r w a 将上面的三个模式称为纯净模式 r+ w+ a ...

  2. PolarDB阿里初赛问题记录 PolarDB 阿里 中间件 比赛 性能 工程手册

    Contents 这篇纯碎是碎碎念记录. 每个value都是4KB,总共最多会写6400W个value,算下来就是64 * 1000 * 1000 * 4 * 1024 Bytes ≈ 256G. 每 ...

  3. Linux系统使用IBMV3700存储(可用)

    第一步:在存储上添加主机,主机采用ISCSI连接,此时需要主机的iqn 主机上获取IQN的命令如下: cat /etc/iscsi/initiatorname.iscsi 此时添加的主机状态处于脱机的 ...

  4. 96)PHP,文件上传(2)

    (1)那么既然看到文件即使上传成功,但是只是在脚本周期内有效,脚本只要结束(脚本结束其实很快的),文件就会自动消失,那么怎么才能永久存储文件呢: 函数: Move_uploaded_file(上传临时 ...

  5. 康耐视软件VisionPro-max-u与VisionPro-plus-u的区别

    康耐视软件VisionPro-max-u与VisionPro-plus-u的区别 1.VisionPro-plus-u为基础版可以直接运用该软件包的算法,拖拽式的窗口程序 2.VisionPro-ma ...

  6. spring-boot jpa mysql emoji utfmb4 异常处理

    spring-boot jpa mysql utf8mb4 emoji 写入失败 mysql database,table,column 默认为utf8mb4 Caused by: java.sql. ...

  7. python-django项目-每次重启电脑需要启动的虚拟机服务_20191124

    python-django项目-每次重启电脑需要启动的虚拟机服务 看来第一步是确定虚拟机的ip问题,必须要是192.168.100.128,否则很多的配置都不能用了, 所以要配置虚拟机的ip, 第一步 ...

  8. libphp5.so可能遇到的问题(转摘)

    libphp5.so可能遇到的问题(转摘) 安装完APACHE和PHP5后,经常在启动APACHE载入libphp5.so时发现问题.我把遇到的问题统计下来: 1.undefined symbol:S ...

  9. OpenWrt编译后生成的bin文件:jffs2与squashfs、factory与sysupgrade

    OpenWrt编译后会生成多个bin文件,比如 openwrt-ar71xx-generic-tl-wr841nd-jffs2-factory.bin 8126464 openwrt-ar71xx-g ...

  10. 吴裕雄--天生自然HTML学习笔记:HTML 速查列表

    HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head& ...