四种方法教你解决拦截器无法加载静态资源
😎拦截器是为了保障网站的资源安全问题😎
我们通常为网站设置拦截器
但是我们设置拦截器一般都是/**
❌使用/**进行全局拦截❌
全部资源都被拦截
✔️然后让拦截器去判断是否通过✔️
但是如果没有对静态资源进行管理🤷♂️
😢静态资源就没法正常加载😢
一般的拦截器配置 :
<!-- 拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!--排除拦截-->
<mvc:exclude-mapping path="/user/login"/>
<!--配置的拦截器-->
<bean class="com.example.demo.interceptor.PrivliegeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
方法一:
直接对拦截器动手脚😏
(简单粗暴,😎灵活度低不太推荐)
原理//对后缀进行判断
是静态资源后缀就通过
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
String uri = request.getRequestURI();
//在此处对后缀进行判断是静态资源后缀就通过
if(uri.endsWith("js")||uri.endsWith("css")||uri.endsWith("jpg")||uri.endsWith("svg")){
return true ;
}
User user=(User)session.getAttribute("user");
if(user!=null){
return true;
}else {
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
}
方法二:
对配置文件进行修改 😏
(短短一句解决问题)
<mvc:default-servlet-handler></mvc:default-servlet-handler>
🙁如果不行还往下🙁
方法三:
对资源进行拦截排除 😏
在配置拦截器时就可以把资源排除拦截
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 排除拦截-->
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/css/**"/>
<mvc:exclude-mapping path="/img/**"/>
<mvc:exclude-mapping path="/plugins/**"/>
<bean class="com.example.demo.interceptor.PrivliegeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<mvc:default-servlet-handler></mvc:default-servlet-handler>
对资源排除拦截了后面还是需要加开放静态资源
方法四:
配置静态资源映射😏
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
这几个方法最稳的是 方法三
通过拦截器的排除对资源的限制开放资源