В моем web.xml есть сервлет с ограничением безопасности, как показано ниже:
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Выше принудительно переключается на протокол https и работает нормально. Но на защищенных страницах есть несколько относительных ссылок на незащищенные страницы. Когда пользователи нажимают на них, они открываются через https, чего я хочу избежать. Преобразование относительных ссылок в абсолютные не вариант.
Спецификация сервлета не предоставляет средства принудительного использования незащищенного соединения, поэтому я собираюсь реализовать фильтр, который перенаправляет пользователя на http:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
if(!isSubjectToAuthConstraint(request)) {
// Check protocol and redirect to http if https
// ....
} else {
// Do nothing, managed by servlet spec
filterChain.doFilter(request, response);
}
}
Так что мне нужно знать, находится ли запрос под защитой или нет. Откуда я знаю программно ? Возможно ли это вообще?