Java EE 6 на основе форм аутентификации с калиткой 7 - PullRequest
0 голосов
/ 02 января 2019

Я сталкиваюсь с очень запутанным фактом: у нас есть военный модуль в приложении Java EE с корневым контекстом "foo". Доступ ограничен через

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>fooRealm</realm-name>
    <form-login-config>
      <form-login-page>/login</form-login-page>
      <form-error-page>/loginerror</form-error-page>
    </form-login-config>
</login-config>

Защищенный ресурс определяется следующим образом

<security-constraint>

    <web-resource-collection>
      <web-resource-name>Foo-App</web-resource-name>
      <url-pattern>/bar/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>

    <auth-constraint>
      <role-name>foo-role</role-name>
    </auth-constraint>

    <user-data-constraint>
      <transport-guarantee>INTEGRAL</transport-guarantee>
    </user-data-constraint>

</security-constraint>

Страницы входа и ошибки входа монтируются с использованием Wicket 7:

mountPage("login", LoginWebPage.class);
mountPage("loginerror", LoginErrorWebPage.class);

Я перехожу на https://localhost:7002/foo/bar, а сервер приложений (WebLogic 12.1.3) перенаправляет на https://localhost:7002/foo/login (как и ожидалось). Login-WebPage - это простая веб-страница со следующим html

<form method="POST" action="j_security_check">
    <input name="j_username" type="text" />
    <input name="j_password" type="password"/>
    <input type="submit" value="Login"></input>
</form>

Файл WebPage.java в wicket - это простая веб-страница без каких-либо виджетов калитки. Единственное здесь, что некоторые ресурсы CSS включены в PackageResourceReferences:

public class LoginWebPage extends WebPage {

    @Override
    public void renderHead(IHeaderResponse response) {
        response.render(CssHeaderItem.forReference(...));
    }
}

Теперь я сталкиваюсь со следующей проблемой: если я введу действительные учетные данные на странице входа в систему, то я буду перенаправлен на защищенный ресурс / foo / bar. Различное поведение при вводе неверных учетных данных: тогда URL остается в / foo / j_security_check и сервер отвечает кодом состояния 404. Если я вручную перехожу к / foo / loginerror, то я вижу страницу ошибки входа. Я не могу понять, где ошибка.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 03 января 2019

Weblogic вперед в(вместо перенаправления ), поэтому фильтр Wicket не сможет обработать /loginerror.Контейнер не может найти /loginerror и вместо этого отвечает 404 .

Я не уверен, соответствует ли это стандартам, вам придется попробовать с другимиконтейнеры для сравнения.Для обходного пути вы можете использовать jsp:

<form-error-page>/loginerror.jsp</form-error-page>

..., который перенаправляет на текущую страницу Wicket:

<% response.sendRedirect("./loginerror"); %>
...