使用 SpringDispatcherServlet 的一切都是基于 URL 的,我认为你不能通过控制器来做到这一点。
您将需要使用过滤器,请查看此处的 API https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/filter/package-summary.html 您可能想要使用 OncePerRequestFilter。
public class MyFilter extends OncePerRequestFilter{
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
然后您需要在 web.xml 中添加过滤器
<filter>
<filter-name>requestFilter</filter-name>
<filter-class>com.greg.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>errorHandlerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
现在是 hacky 一点,如果你想在这里获取 Spring bean,你可以创建一个带有静态的 Bridge 类。
public class Bridge {
private static PaymentService paymentService;
public PaymentService getPaymentService() {
return paymentService;
}
public void setPaymentService(PaymentService paymentService) {
Bridge.paymentService = paymentService;
}
}
如果你想在这个类中注入一些spring bean
<bean id="paymentService" class="net.isban.example.service.PaymentService" />
<bean class="net.isban.example.util.Bridge">
<property name="paymentService" ref="paymentService" />
</bean>
然后在您的过滤器中(不是弹簧类)。
PaymentService paymentService = new Bridge().getPaymentService();
很高兴有人向我展示了一种不那么老套的方法。