Tag: servlet filters

在重定向filter时停止进一步处理

我有URLRewirteFilter,它检查请求的域是否以www开头。 并重定向到no-www url。 当要重定向请求时,如何停止进一步处理(调用JSF应用程序,调用servlet等)? 到目前为止我有这个: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String sn = req.getServerName().toLowerCase(); if (sn.startsWith(“www.”)) { String url = “http://” + getDefaultDomain() + req.getContextPath() + req.getRequestURI(); HttpServletResponse resp = (HttpServletResponse) response; resp.reset(); resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); resp.setHeader(“Location”, url); } chain.doFilter(request, response); }

在JSF Web应用程序中处理“会话已过期”,在JBoss AS 5中运行

这个问题与我的另一个问题“ 如何在Java Web应用程序中过期会话时重定向到登录页面? ”有关。 以下是我正在尝试做的事情: 我在JBoss AS 5上运行了一个JSF Web应用程序 当用户处于非活动状态时,例如15分钟,我需要注销用户并将其重定向到登录页面,如果他在会话过期后尝试使用该应用程序。 因此,正如’ JSF Logout and Redirect ‘中所建议的那样,我已经实现了一个filter,用于检查会话过期情况,并在会话过期时将用户重定向到session-timed-out.jsp页面。 我已经在web.xml中的所有其他filter定义之上添加了SessionExpiryCheckFilter,因此我的会话到期检查将始终获得第一次命中。 现在迎来了我所面临的挑战 。 由于我使用的是JBoss AS,当会话过期时,JBoss会自动将我重定向到登录页面(请注意,不会调用会话到期检查filter)。 因此,在我登录后,我的SessionExpiryCheckFilter拦截了请求,并且它看到会话可用。 但是,它抛出了exceptionjavax.faces.application.ViewExpiredException: viewId:/mypage.faces – View /mypage.faces could not be restored. 以前有人遇到过这个问题吗? 有什么想法可以解决这个问题?

如何从POST请求中获取XML并在Servlet Filter中修改它?

我目前正在处理一个需求,我需要在请求到达Spring控制器之前在servletfilter中获取XML(来自POST请求),然后我需要处理XML(切断一些空节点/元素)过滤然后调用应该继续进行。 我尝试了下面的代码(只附加了代码片段),我能够获取请求体(XML)并能够设置修改后的响应。 HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; if (httpRequest.getMethod().equalsIgnoreCase(“POST”)) { extractDataFromRequest(httpRequest); httpResponse.getWriter().write(“”); } chain.doFilter(request, wrappedResponse); public static String extractDataFromRequest(HttpServletRequest request) throws IOException { String line; StringBuilder builder = new StringBuilder(); BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) { builder.append(line); } return builder.toString(); } 但是,spring因以下exception而失败。 Severe: java.lang.IllegalStateException: PWC3997: […]

查询字符串中的字符编码,希伯来语

我正在尝试使用希伯来语中的查询字符串参数发送GET请求。 当控制器获得请求时,参数是乱码。 我添加了“org.springframework.web.filter.CharacterEncodingFilter”,但它没有改变一件事。 请告知如何解决它。 更新:这是请求。 GET /myapp/specialties?query=%D7%92%D7%99%D7%A0%D7%A0%D7%A0%D7%A0 HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: * Cache-Control: no-cache User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36 Content-Type: application/json;charsert=utf-8 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8,he;q=0.6 Query String Parametersview sourceview URL encoded query:גיננננ Response Headersview source Content-Type:application/json;charset=UTF-8 Date:Mon, 03 Mar 2014 20:45:17 GMT Server:Apache-Coyote/1.1 Transfer-Encoding:chunked […]

如何使filter检测用户是否请求了未找到的页面?

我想在我的应用程序中创建一个filter,以便在每个请求之前,它检测所请求的页面是否存在。 如果它不存在,它会将用户转发到错误页面。 如何检测页面是否存在? 我需要一个带filter的解决方案,而不是使用web.xml标记方法。

编写一个Servlet来检查JSP是否存在,如果不存在则转发给另一个JSP

更新: 澄清捕获404的一般错误捕获器对我来说没有足够的粒度。 我只有在jsp位于特定目录中时才需要这样做,并且只有当文件名包含某个字符串时才需要这样做。 / UPDATE 我的任务是编写一个servlet来拦截对特定目录中的JSP和JSP的调用,检查文件是否存在以及它是否仅转发到该文件,如果没有,那么我将转发到默认的JSP。 我按如下方式设置了web.xml: This is the description of my J2EE component This is the display name of my J2EE component CustomJSPListener … CustomJSPListener 1 … CustomJSPListener /custom/* 并且servlet的doGet方法如下: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug(String.format(“Intercepted a request for an item in the custom directory [%s]”,request.getRequestURL().toString())); String requestUri […]

使用servletfilter从发布的数据中删除表单参数

供应商已经通过HTTPS在名为XMLContent的表单变量中将XML数据发布到我的Coldfusion应用程序服务器。 我最近转移到更新版本的应用程序服务器,这些请求丢失了500个服务器错误。 它抛出了错误,因为第二个表单参数的内容没有正确地进行urlencoded,但我还是不需要那个参数。 (我联系了供应商来解决这个问题,但是他们强迫我付钱修理他们的错误,所以如果可能的话,我希望自己修理它。) 我如何利用servletfilter删除除了名为的forms参数之外的所有参数:XMLContent我已尝试过各种尝试来显式删除有问题的参数“TContent”,但它永远不会被删除。 收到的数据片段: XMLContent=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3CCheck+xmlns%3D%22http ………&TContent=<check xmlns="http……….. 我试过的代码: import java.io.IOException; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.util.*; public class MultipartFilter implements Filter { // Init —————————————————————- public FilterConfig filterConfig; // Actions ————————————————————- […]

如何仅对http post方法应用servletfilter

在我的应用程序中,我想应用一些filter,但我不希望所有的请求都必须转到该filter。 这将是一个性能问题,因为我们已经有了一些其他的filter。 我希望我的filter仅适用于HTTP POST方法..有什么办法吗? 请帮我解决这个问题。 谢谢Kiran

用于浏览器缓存的Servletfilter?

有谁知道如何编写一个servletfilter,它将在给定文件/内容类型的响应上设置缓存头? 我有一个提供大量图像的应用程序,我想通过让浏览器缓存那些不经常更改的浏览器来减少托管它的带宽。 理想情况下,我希望能够指定内容类型,并在内容类型匹配时设置适当的标头。 有谁知道怎么做这个? 或者,更好的是,他们愿意分享示例代码? 谢谢!

如何在java中跳过filter链中的filter

我的应用程序中有2个filter。 基于某些条件,我想选择是否执行第二个filter。 有没有办法做到这一点? 我做了一些谷歌搜索没有成功。 我希望请求继续而不执行第二个filter。 那可能吗? 任何帮助将不胜感激。