【发布时间】:2011-04-04 21:31:47
【问题描述】:
我有一个 apache 网络服务器,用于提供 php 和静态网络文件。为了使用活动目录身份验证,我编写了一些可以通过 JNDI 连接到 AD 并验证用户名密码和组的代码。我想要的是通过我的 servlet 将所有请求映射到 apache 中的页面,以确保存在有效的会话,然后如果他们必须再次登录,他们有正确的 AD 组来访问特定的 url。我的问题是,当我使用 /* 将我的 servlet 映射到每个 url 时,它无法将请求转发到我试图获取的实际页面。它只是不断地将请求转发给我的 servlet 并调用它的 doGet 方法,直到发生 servlet 异常。我想要透明代理的功能,但我似乎无法从中获得。有没有人有任何透明代理 servlet 的具体示例或知道使用 servlet 执行此操作的方法。 servlet 的转发功能似乎使它成为执行此操作的完美工具,但我似乎被卡住了。
过滤代码
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
boolean authenticated = false; //should be false when testing is done.
//skip if its the login page
if(req.getRequestURI().equals("/auth/login.jsp") || authenticated){
chain.doFilter(req, res);
}else{
req.setAttribute("protectedUrl", req.getRequestURI());
res.sendRedirect("/auth/login.jsp");
}
}
Web.xml
(snip)
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
【问题讨论】:
-
当您尝试转发请求时遇到什么错误?您是否记得将端口号更改为 Apache 正在侦听的端口?
-
我还没有在apache中实现转发。我只是在部署 servlet 的 jboss 服务器中运行示例。我得到的错误是 Servlet 异常,堆栈跟踪只是对我的 servlet 的 doGet 方法的一长串调用。我相信这是因为 servlet 映射到 /*.如上所述,我希望所有 url 首先通过 servlet。我没有看到任何其他设置页面的方法,所以会发生这种情况。
标签: java authentication servlets jakarta-ee