springmvc过滤静态资源
时间: 2023-11-08 13:05:26 浏览: 88
SpringMVC默认会拦截所有请求,包括静态资源请求,为了提高性能,我们可以通过配置SpringMVCSupport将静态资源放行。具体实现可以参考以下步骤:
1.创建一个配置类,并将其设置为配置类,并被扫描加载。
2.在配置类中重写addResourceHandlers方法,设置静态资源访问过滤。例如,当访问/pages/???的时候,从/pages目录下查找内容,可以使用以下代码实现:
```
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
}
```
3.在ServletContainersInitConfig中配置根路径为/,例如:
```
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
```
这样就可以实现SpringMVC过滤静态资源的功能了。
相关问题
springmvc配置静态资源放行
Spring MVC 中配置静态资源放行是为了让Web应用能够直接访问静态文件,如CSS、JavaScript、图片等,而无需每次都通过Controller处理。你可以通过修改Spring MVC的配置或者使用特定的过滤器来实现这一目标。以下是常见的做法:
1. **修改`web.xml`**:
在项目的`web.xml`文件中,添加一个 `WelcomeFilter` 或类似名称的Servlet过滤器,配置它接收所有以`.css`, `.js`, `.jpg`等结尾的URL:
```xml
<filter>
<filter-name>staticResources</filter-name>
<filter-class>com.example.StaticResourceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>staticResources</filter-name>
<url-pattern>/static/*</url-pattern>
</filter-mapping>
```
然后创建一个简单的`StaticResourceFilter`,例如:
```java
@Component
public class StaticResourceFilter implements Filter {
// 过滤请求并返回静态资源
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
String uri = ((HttpServletRequest) req).getRequestURI();
if (uri.endsWith(".css") || uri.endsWith(".js")) {
HttpServletResponse response = (HttpServletResponse) resp;
response.setContentType(getMimeType(uri));
try (InputStream is = getClass().getResourceAsStream(uri)) {
StreamUtils.copy(is, response.getOutputStream());
}
} else {
chain.doFilter(req, resp);
}
}
private String getMimeType(String fileName) {
// 返回对应文件类型的MIME类型
return ...; // 根据实际需要填充
}
}
```
2. **使用`<mvc:default-servlet-handler>`标签**:
在Spring MVC的配置文件`applicationContext.xml`或`spring-boot-mvc.xml`中,添加`<mvc:default-servlet-handler/>`标签,这将启用默认的Servlet来处理静态资源。
```xml
<!-- 如果是Spring Boot -->
<mvc:default-servlet-handler/>
<!-- 或者Spring MVC的传统配置 -->
<bean id="defaultServletHandler" class="org.springframework.web.servlet.mvc.DefaultServletHandler">
<property name="order" value="0"/>
<property name="defaultContentType" value="text/html;charset=UTF-8"/>
</bean>
```
springmvc过滤器和拦截器
Spring MVC 中的过滤器和拦截器都可以在请求处理之前或之后进行一些特定的操作,但它们的实现方式和作用范围不同。
过滤器是基于 Servlet 规范实现的,在 Servlet 容器中运行,可以拦截所有的请求(包括静态资源请求),并对请求进行处理。过滤器通常用于请求的预处理和后处理,比如编码转换、日志记录、权限校验、资源缓存等。
拦截器是基于 Spring MVC 框架实现的,在 DispatcherServlet 中运行,只能拦截 Spring MVC 的请求(即只能拦截到经过 DispatcherServlet 的请求),并对请求进行处理。拦截器通常用于请求的预处理和后处理,比如权限校验、日志记录、性能监控等。
下面是一个简单的 Spring MVC 过滤器和拦截器的示例:
```java
// 过滤器实现类
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化方法
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 处理请求的方法
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}
@Override
public void destroy() {
// 销毁方法
}
}
// 拦截器实现类
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 处理请求前的方法
System.out.println("请求 URL:" + request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 处理请求后的方法
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 请求处理完成后的方法
}
}
```
在 Spring MVC 中配置过滤器和拦截器:
```xml
<!-- 配置过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.example.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置拦截器 -->
<mvc:interceptors>
<bean class="com.example.LogInterceptor" />
</mvc:interceptors>
```
阅读全文