gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:31:59 26 4
gpt4 key购买 nike

我有一个过滤器,在我的例子中它是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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com