1.編寫一個Spring獲取Bean的工具類(記得讓Spring掃描該類)web
@Component public class SpringUtil implements ApplicationContextAware{ private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } } public static ApplicationContext getApplicationContext() { return applicationContext; } //根據name public static Object getBean(String name) { return getApplicationContext().getBean(name); } //根據類型 public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
2.編寫Struts2的過濾器,我寫的這個主要是爲了從FTP文件服務器下載文件服務器
@Component public class MyFileFilter implements Filter{ @Autowired private FtpClientTemplate ftpClientTemplate; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; HttpSession session = req.getSession(); String url = req.getRequestURI(); if (url.contains("/upload/users/") && session.getAttribute("login_user") != null) { ftpClientTemplate.downloadFile(resp, "", url); } else { chain.doFilter(request, response); } } @Override public void init(FilterConfig arg0) throws ServletException { if (ftpClientTemplate == null) { ftpClientTemplate = (FtpClientTemplate)SpringUtil.getBean(FtpClientTemplate.class); } } @Override public void destroy() {} }
3.在web.xml配置該過濾器,應該寫在struts2的過濾器以前session
<filter> <filter-name>file</filter-name> <filter-class>com.carter.filter.MyFileFilter</filter-class> </filter> <filter-mapping> <filter-name>file</filter-name> <url-pattern>/upload/*</url-pattern> </filter-mapping>