Google Appeice上的Google Guice:使用_ah进行映射

Mar*_*cus 3 java google-app-engine guice

我有一个Google Appengine/Guice/Wicket应用程序.我的问题是,由于映射,我无法再访问/ _ah/admin页面.

我的Servlet模块说:

serve( "/*" ).with( WicketServlet.class, getWicketServletParams() );
Run Code Online (Sandbox Code Playgroud)

到目前为止,或多或少地预期访问/ _ah/admin会给出404.

我的问题是我没有找到解决方法.

我尝试了不同的serveRegex()组合,但是甚至

serveRegex( "/.*" ).with( WicketServlet.class, getWicketServletParams() );
Run Code Online (Sandbox Code Playgroud)

导致问题,因为Wicket的URL调度被破坏.应用程序继续重复路径(例如/ list变为/ list/list等).

有任何想法吗?

Sal*_*RYS 5

我找到了一个更优雅的解决方案:

它不是使用GuiceFilter,而是将其子类化为拦截_ah/*调用,让servlet容器执行常规作业,而不是让Guice拦截它.在这里,我阻止Guice拦截/ _ah/*但是/ _ah/warmup因为/ _ah/warmup应该由程序员处理.

package com.kya.guice.mvc;

import java.io.IOException;
import java.util.regex.Pattern;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import com.google.inject.servlet.GuiceFilter;

public class GaeSafeGuiceFilter extends GuiceFilter {

    private static final Pattern p = Pattern.compile("/_ah/.*");

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)request;

        if (p.matcher(req.getRequestURI()).matches() && !req.getRequestURI().equals("/_ah/warmup")) {
            chain.doFilter(request, response);
            return ;
        }

        super.doFilter(request, response, chain);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您只需使用以下命令更改web.xml:

<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.kya.guice.mvc.GaeSafeGuiceFilter</filter-class>
</filter>
Run Code Online (Sandbox Code Playgroud)

而不是com.google.inject.servlet.GuiceFilter