这篇文章将为大家详细讲解有关在Springboot中使用shiro时静态资源被拦截如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强>目录结构如下强>
在自己配置的ShiroConfig中已经放行了
filterChainDefinitionMap.put(“/静态/* *,,,“anon");
登录。ftl也引用了静态资源
& lt; link rel=皊tylesheet",类型=拔谋?css" https://www.yisu.com/zixun/, href="/登录/css/normalize.css”rel="外部nofollow "/> //filterChainDefinitionMap.put (“/* *”,,,“authc");
静态资源可以访问了,说明不是shiro的内在问题。
经过一番考虑,感觉像是静态资源路径的问题,于是在浏览器控制台看一源下的路径,发现静态资源的路径前面是没有静态的,因而shiro也不会放行。
springboot默认会将静态目录中的内容做根为类目录的内容发布到web服务器,所以如果想要放行静态资源,同时又要实现拦截/* *请求,那么我的解决办法是:
解决办法
<强>目录改造如下:强>
<强>拦截配置:强>
filterChainDefinitionMap.put(“静力学/* *,,,“anon"); filterChainDefinitionMap.put (“/* *”,,,“authc");
重启web服务器,清除浏览器缓存,此时源中已经是正确的路径了,静态资源被引用了。问题解决
记录一下自己犯得低级错误。
<>强补充:SpringMVC + shiro不拦截静态资源配置强>
最近在弄SpringMVC与shiro整合,发现如果将DispatcherServlet拦截*,这样的URL,就不存在访问不到静态资源的问题。如果DispatcherServlet改为拦截",拦截了所有的请求,同时对* . js, * . jpg的访问也就被拦截了。
解决方法:
<强>方案一:强>
激活Tomcat的defaultServlet来处理静态文件
& lt; servlet-mapping> ,& lt; servlet-name> default ,& lt; url-pattern> * .jpg & lt;/servlet-mapping> & lt; servlet-mapping> ,& lt; servlet-name> default ,& lt; url-pattern> * .js & lt;/servlet-mapping> & lt; servlet-mapping> ,& lt; servlet-name> default ,& lt; url-pattern> * .css 时间/servlet-mapping> & lt; ……
提示:要写在DispatcherServlet的前面,让defaultServlet先拦截,这个就不会进入春天了
<强>方案二:强>
在spring3.0.4以后版本提供了mvc:资源
& lt; mvc: resources 的使用方法: & lt; !——对静态资源文件的访问——比; & lt; mvc: resources 映射=?图片/* *“,位置=?图片/?/比;/图片/* *,映射到,ResourceHttpRequestHandler 进行处理,
位置指定静态资源的位置。可以是web应用程序的根目录下,jar包里面,这样可以把静态资源压缩到jar包中.cache-period可以使得静态资源进行web缓存
报错警告:没有发现HTTP请求的URI映射[/mvc/user/findUser lisi/770]在DispatcherServlet名称& # 39;springmvc # 39;
可能是没有配置如下代码
& lt; mvc: annotation-driven /祝辞
使用& lt; mvc:资源/比;元素,把映射的URI注册到SimpleUrlHandlerMapping的urlMap中,
键为映射的URI模式值,而价值为ResourceHttpRequestHandler,
这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持类目录,jar包内静态资源的访问。
另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler。因为对静态uri的defaultHandler就是ResourceHttpRequestHandler,
否则无法处理静态资源请求。
<>强方案三强>