在Springboot中使用shiro时静态资源被拦截如何解决

  介绍

这篇文章将为大家详细讲解有关在Springboot中使用shiro时静态资源被拦截如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>目录结构如下

在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服务器,所以如果想要放行静态资源,同时又要实现拦截/* *请求,那么我的解决办法是:

解决办法

<强>目录改造如下:

在springboot中使用shiro时静态资源被拦截如何解决

<强>拦截配置:

filterChainDefinitionMap.put(“静力学/* *,,,“anon");   filterChainDefinitionMap.put (“/* *”,,,“authc");

重启web服务器,清除浏览器缓存,此时源中已经是正确的路径了,静态资源被引用了。问题解决

在Springboot中使用shiro时静态资源被拦截如何解决

记录一下自己犯得低级错误。

<>强补充: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,

否则无法处理静态资源请求。

<>强方案三

使用& lt; mvc: default-servlet-handler/祝辞

在Springboot中使用shiro时静态资源被拦截如何解决