我有一個用於提供php和靜態web文件的apache web服務器。爲了使用Active Directory身份驗證,我編寫了一些代碼,可以通過JNDI連接到AD並驗證用戶名密碼和組。我想要的是通過我的servlet將所有請求映射到apache中的頁面,以確保存在有效的會話,然後如果他們必須再次登錄,他們有正確的AD組才能訪問特定的URL。我的問題是,當我使用/ *將我的servlet映射到每個url時,它無法將請求轉發到我嘗試獲取的實際頁面。它只是將請求轉發到我的servlet並調用它的doGet方法,直到發生一個servlet異常。我想要透明代理的功能,但我似乎無法從中獲得。有沒有人有任何透明代理servlet的具體例子,或者知道用servlet來做到這一點的方法。 servlet的轉發功能似乎使它成爲完美的工具,但我似乎被卡住了。作爲Apache Web服務器代理的Java 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正在監聽的端口? – TMN 2010-08-27 16:01:10
我還沒有在Apache中實現轉發。我只是在部署了servlet的jboss服務器上運行示例。我收到的錯誤是一個Servlet異常,堆棧跟蹤只是對我的servlet的doGet方法的一長串調用。我相信這是因爲servlet映射到/ *而發生的。如上所述,我希望所有的URL都先通過servlet。我沒有看到任何其他方式來設置頁面,所以發生這種情況。 – 2010-08-27 16:08:27