您的位置:首页 > 编程语言 > Java开发

springMVC 过滤器获取bean 和 multipart/form-data请求参数

2017-09-26 16:16 1246 查看
在web项目中,有时我们需要在自定义的过滤器中对请求进行身份验证或者其他一些操作,这里就可能出现一些问题,如获取不到multipart/form-data请求参数,无法注入bean等。

这里介绍其中一种简单的解决方案:

过滤器中获取bean

可以通过spring上下文实现,主要操作是:

ServletContext sc = filterConfig.getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);
DemoBean demoBean = (DemoBean) cxt.getBean("demoBean");


获取 multipart/form-data 请求参数

可通过CommonsMultipartResolver 类的
resolveMultipart(final HttpServletRequest request)
方法将HttpServletRequest转化为MultipartHttpServletRequest,然后通过MultipartHttpServletRequest对象的
getParameter(String var1)
方法获取对应的属性值。

String contentType = request.getContentType();
if (contentType != null && contentType.contains("multipart/form-data")) {
MultipartHttpServletRequest multiReq = multipartResolver.resolveMultipart(request);
}
String var = request.getParameter("var");


总结

1、web.xml 配置

<filter>
<filter-name>myFilter</filter-name>
<filter-class>cn.ted.smsparser.web.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


如果一个过滤器要配置多个url-pattern,请配置多个filter-mapping,如下:

<filter>
<filter-name>myFilter</filter-name>
<filter-class>cn.ted.smsparser.web.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/pattern1/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/pattern2/*</url-pattern>
</filter-mapping>


2、自定义过滤器 MyFilter.java

public class MyFilter implements Filter {
private CommonsMultipartResolver multipartResolver;
private FilterConfig filterConfig;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
multipartResolver = new CommonsMultipartResolver();
this.filterConfig = filterConfig;
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 获取bean
ServletContext sc = filterConfig.getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils.getWebApplicationContext(sc);
DemoBean demoBean = (DemoBean) cxt.getBean("demoBean");
// 处理 multipart/form-data 请求
String contentType = request.getContentType();
if (contentType != null && contentType.contains("multipart/form-data")) {
MultipartHttpServletRequest multiReq = multipartResolver.resolveMultipart(request);
// 将转化后的 request 放入过滤链中
servletRequest = multiReq;
request = multiReq;
}
//todo : your code
filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc filter java
相关文章推荐