Для предотвращения прямого доступа к JSP странице из браузера можно использовать несколько методов. Основная идея заключается в том, чтобы ограничить доступ к страницам, оставив доступ только через контроллеры, такие как сервлеты, или посредством определенных условий доступа.
🟠Размещение файлов внутри WEB-INF
Размещение файлов внутри папки
WEB-INF предотвращает прямой доступ к ним из браузера. Любой файл в WEB-INF не может быть напрямую запрошен клиентом, но может быть доступен сервером, что позволяет контролировать доступ к через сервлеты./WEB-INF/
/jsp/
protectedPage.jsp
web.xml
Теперь доступ к
protectedPage.jsp можно получить только через сервлет.@WebServlet("/protectedPage")
public class ProtectedPageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/jsp/protectedPage.jsp").forward(request, response);
}
}🟠Использование фильтров (Servlet Filters)
Фильтры могут быть использованы для проверки доступа к JSP страницам и перенаправления запросов при необходимости. Фильтр можно настроить так, чтобы он проверял доступ только для авторизованных пользователей.
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.FilterServletRequest;
import javax.servlet.FilterServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/jsp/*") // Применение фильтра ко всем запросам к JSP
public class AuthenticationFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// Проверка сессии или авторизации
if (httpRequest.getSession().getAttribute("user") == null) {
httpResponse.sendRedirect(httpRequest.getContextPath() + "/login");
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig fConfig) throws ServletException {
// Инициализация фильтра (если необходимо)
}
public void destroy() {
// Очистка ресурсов (если необходимо)
}
}
🟠Конфигурация в web.xml
Можно использовать декларативную конфигурацию в файле
web.xml, чтобы ограничить доступ к JSP страницам.<web-app ...>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected JSP</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>AUTHORIZED_USER</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login-error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>AUTHORIZED_USER</role-name>
</security-role>
</web-app>
Ставь 👍 и забирай 📚 Базу знаний