java - 为什么 Web 逻辑和 WebSphere 中的过滤器行为不同

标签 java filter websphere weblogic

我有一个过滤器,在我的例子中它是SessionFilter,它在 doFilter() 方法中有一些自定义逻辑来验证请求,在验证此请求的过程中我正在执行数据库操作。当我部署在Weblogic环境中时,它工作正常。但是当我在 WebSphere 环境中部署相同的应用程序时遇到问题。根据我的要求, doFilter() 应该只执行一次,它发生在网络逻辑中,但不在网络领域中。过滤器在处理请求之前和处理 Web 领域的请求之后被调用两次。我知道这是 servlet api 规范的预期行为。但为什么 Weblogic 中没有发生这种情况呢?成功验证请求后,我通过调用 chan.doFilter() 来允许请求。一旦成功,它就不应该调用相同的逻辑来验证请求。但在网络领域,这种情况正在发生。为什么同一应用程序在两台服务器中表现不同?

Hi Following is my filter configuration in web.xml.. 

<filter>
    <filter-name>sessionFilter</filter-name>
    <filter-class>com.abc.filter.SessionFilter</filter-class>     
</filter>
  <filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

以下是不完全是 doFilter() 代码。但情况类似。

public void doFilter(final ServletRequest req, final ServletResponse res,
            final FilterChain chain) throws ServletException {

  //Do some db operation
if (!success){
response.sendRedirect("/../../login.jsp");
return;
}
chain.doFilter(req, res);
}//doFilter
}

最佳答案

您正在使用映射到所有网址 (/*) 的 Filter

并且在您的过滤器中,您可以选择执行重定向:

response.sendRedirect("/../../login.jsp");

现在,如果您的过滤器应该调用所有 URL,那么在其中重定向到相对 URL 是一个非常糟糕的主意。根据调用/请求的 URL,重定向到的相对 URL 将有所不同。在这种情况下,您应该使用绝对 URL 进行重定向,例如“/pages/login.jsp”。这也可能解释了对过滤器的不同调用次数之间的一些差异。

关于java - 为什么 Web 逻辑和 WebSphere 中的过滤器行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25863059/

相关文章:

java - 如何在Websphere中设置log4j.properties文件的相对路径

java - install4J 7.0.6 找不到我的 BeanInfo

java - 如何匹配字符串输入

java - Spring Autowiring 参数化类的问题

html - 将滤镜渐变应用于单元格时,IE9 中不显示单元格边框

Tomcat 过滤器映射无法通过 ProxyPass 工作

java - jtextarea.settext()方法是否被缓冲?

java - 如何在 Java 中过滤数组?

websphere - 关于 MQFTE 的链接和书籍?

java - WebSphere DynaCache 淡化问题