Сервлет не позволяет открыть форму-логин-страницу - PullRequest
0 голосов
/ 19 октября 2018

У меня есть сервлет с аннотацией @WebServlet({"/*", "/secure/*"}).Второй URL был создан для контента, который может быть получен аутентифицированными пользователями.И первый URL для всех пользователей.

В качестве сервера я использую weblogic.Так что это мой web.xml

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>authenticated</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/error.html</form-error-page>
    </form-login-config>
</login-config>
<security-role>
    <role-name>authenticated</role-name>
</security-role>

и weblogic.xml

<security-role-assignment>
    <role-name>authenticated</role-name>
    <principal-name>auth_user</principal-name>
</security-role-assignment>

Так что, когда я пытаюсь запросить localhost:7001/myservlet/secure?id=329, я получаю localhost:7001/myservlet/login.html.И это правильно.Но я не получаю свою login.html форму.Мой сервлет считает, что этот URL для него и пытается его обработать.И я получаю ошибку.Любые идеи, как решить эту проблему?

PS Когда я удаляю "/*" из @WebServlet, я успешно получаю форму login.html.Но я не могу изменить URL сервлета.

ОБНОВЛЕНИЕ

Я удалил дополнительный код и получил этот код сервлета

@WebServlet({"/*", "/secure/*"})
public class MyServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) {

    ContentGetter getter = new ContentGetter();

        try (OutputStream os = response.getOutputStream();
                InputStream is = getter.getIsFromDB(request.getParameterMap())) {

            IOUtils.copy(is, os);

        } catch (IOException e) {
            logger.error("Object getting is failed. " + e.toString(), e);
            return;
        }
    }

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doGet(request, response);
}
}

Метод getter.getIsFromDB (request.getParameterMap () генерирует IllegalArgumentException, если параметры Map пустые. Наконец, я получаю ошибку 500.

...