У меня есть сервлет с аннотацией @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.