У меня есть веб-сервер apache, который используется для обслуживания php и статических веб-файлов. Для того, чтобы использовать активную аутентификацию каталогов, я написал некоторый код, который может подключаться к AD через JNDI и аутентифицировать пароли и группы имен пользователей. Я хотел бы отобразить все запросы на страницы в apache через мой сервлет, чтобы убедиться в наличии действительного сеанса, а затем, если им придется снова войти в систему, у них есть правильная группа AD для посещения определенного URL. Моя проблема в том, что когда я сопоставляю свой сервлет с каждым URL с помощью / *, он не может пересылать запросы на те страницы, которые я пытаюсь получить. Он просто пересылает запрос моему сервлету и вызывает его метод doGet, пока не возникнет исключение сервлета. Мне нужна функциональность прозрачного прокси, но я не могу этого понять. У кого-нибудь есть конкретные примеры прозрачного прокси сервлета или есть способ сделать это с сервлетами? Функция пересылки сервлета, кажется, делает его идеальным средством для этого, но я застрял.
Код фильтра
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>