问题描述
我现在项目是这样,项目使用的struts2,用了URL重写,但是重写之后我的过滤器就过滤不到我配置的规则(*.htm,我的struts.action.extension=htm)了,URL重写的过滤器是放在我的过滤器的前面的,问一下是不是请求经过URL重写的这一层过滤器之后就会把URL变成没有重写之前的样子呢?<!--URL重写--><filter><filter-name>UrlRewriteFilter</filter-name><!--过滤器类所在的路径:--><filter-class>com.jorke.base.filter.UrlRewriteFilter</filter-class><!--日志级别(可以不配置)--><init-param><param-name>logLevel</param-name><param-value>WARN</param-value></init-param></filter><filter-mapping><filter-name>UrlRewriteFilter</filter-name><!--拦截所有url--><url-pattern>*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping><!--请求过滤器--><filter><filter-name>requestFilter</filter-name><filter-class>com.jorke.base.filter.RequestFilter</filter-class></filter><filter-mapping><filter-name>requestFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping>
我的数据库的每个字段都是需要存操作人的ID的,所以在过滤器会放入请求信息publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)servletRequest;HttpServletResponseresponse=(HttpServletResponse)servletResponse;AppContext.setRequest(request);try{//Stringheader=request.getHeader("REFERER");//请求的完整地址Stringurl=request.getRequestURI();if(url.endsWith("!save.htm")){Objectobj=request.getSession().getAttribute(JorkeConstant.USER_SESSION_KEY);if(obj==null){response.sendRedirect(request.getContextPath()+"/view/login/login.jsp");}else{filterChain.doFilter(servletRequest,servletResponse);}}else{filterChain.doFilter(servletRequest,servletResponse);}}catch(Exceptione){Logger.getLogger().error(e,e);}finally{}}
publicclassAppContext{/***当前线程中的用户信息*/privatefinalstaticThreadLocal<HttpServletRequest>currentRequest=newThreadLocal<HttpServletRequest>();/***设置用户信息**@paramuserInfo*用户信息*/publicstaticvoidsetRequest(HttpServletRequestrequest){currentRequest.set(request);}/***返回当前登陆用户**@return*/publicstaticBaseEntitygetUserInfo(){BaseEntitycurrentuser;try{currentuser=(BaseEntity)currentRequest.get().getSession().getAttribute(JorkeConstant.USER_SESSION_KEY);returncurrentuser;}catch(Exceptione){e.printStackTrace();}returnnull;}publicstaticvoidcleanRequest(){currentRequest.set(null);}}
我持久层会调用这个getUserInfo方法的,现在问题就是请求没有走到我的过滤器这里,然后去取用户信息发现request是空的
解决方案
解决方案二:
我去,人呢,求助啊来个大神帮我答疑解惑一下啊