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等).
有任何想法吗?
我找到了一个更优雅的解决方案:
它不是使用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
归档时间: |
|
查看次数: |
1538 次 |
最近记录: |