gpt4 book ai didi

java - 在任何 HandlerMapping 之前修改 HttpServletRequest?

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

我试图解决的问题是我想根据数据库检查所有传入的 GET url。如果数据库中存在 url,则应将其传递给某个 Controller 。我正在使用 Spring 3.0。

首先我尝试制作一个 interceptor并将其添加到 DefaultAnnotationsHandlerMapping。结果我无法修改 preHandle() 中的 url。计划是修改请求中的 url,然后让带注释的 Controller 处理其余部分。

接下来我尝试制作自定义 HandleMapping。我延长了AbstractUrlHandlerMapping并制作了我自己的 getHandlerInternal() ,它返回一个带有 Controller 名称的字符串,并且这是有效的。但我更喜欢一个可以修改请求中的 url 并让带注释的 Controller 处理它的解决方案。

在写这篇文章时,我想到也许 servlet 过滤器是最合适的解决方案。如果是这种情况,我可以让 Spring 将 EntityManager 注入(inject)到过滤器中吗?我可以扩展任何 Spring 类来使这变得更容易吗?

解决第一段中的问题最正确的方法是什么?如果是 servlet 过滤器,请给我一些关于如何编写它的指示。

最佳答案

我意识到这是一个旧线程,但我建议您扩展 org.springframework.web.servlet.DispatcherServlet像这样的东西:

@Override
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
RequestImpl req = RequestImpl.wrapRequest(request, response);
request = req;
response = req.getResponse();
} catch (Throwable t) {
//swallow }
super.doDispatch(request, response);
}

然后在您的 web.xml 中将此调度程序引用为:

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>blah.com.MyDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

等等。扩展 Spring MVC 的绝对核心类似乎很可怕,但如果您足够大,还记得,在注释的黑暗时代之前,当真正的成年人仍然致力于我们都喜欢的美丽的 POJO 框架时,这就是您的方式我打算使用 Spring。

关于java - 在任何 HandlerMapping 之前修改 HttpServletRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969213/

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