аутентификация на основе формы tomcat 7


Задан сервлет HelloServlet:

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * Default constructor.
     */
    public HelloServlet() {
    // TODO Auto-generated constructor stub
    }


   @Override
    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.print("hello my Friend: " + request.getRemoteUser());
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("This is the Test Servlet");

    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String headerName = (String) headerNames.nextElement();
        out.print("<br/>Header Name: <em>" + headerName);
        String headerValue = request.getHeader(headerName);
        out.print("</em>, Header Value: <em>" + headerValue);
        out.println("</em>");
    }
    }
....
}

С объявленной политикой безопасности tomcat в web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>my application</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>

    <auth-constraint>
        <role-name>tomcat</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-failed.jsp</form-error-page>
    </form-login-config>
</login-config>

И определения ролей tomcat в conf / tomcat-users.xml

  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>

Область в " сервере.xml " это:

  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <!-- This Realm uses the UserDatabase configured in the global JNDI
         resources under the key "UserDatabase".  Any edits
         that are performed against this UserDatabase are immediately
         available for use by the Realm.  -->
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
  </Realm>

, я попытался получить доступ к сервлету "HelloServlet" с url localhost/jsfWorkgroup/HelloServlet.

Как и ожидалось, я (re)направлен на страницу входа:

<form method="POST" action="j_security_check">
<table>
  <tr>
    <td colspan="2">Login to the Tomcat-Demo application:</td>
  </tr>
  <tr>
    <td>Name:</td>
    <td><input type="text" name="j_username" /></td>
  </tr>
  <tr>
    <td>Password:</td>
    <td><input type="password" name="j_password"/ ></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" value="Go" /></td>
  </tr>
</table>
</form>

Независимо от того, какой id-токен я использовал:

  1. имя пользователя: tomcat passwort: tomcat
  2. имя пользователя: оба passwort: tomcat

Я все-таки прихожу к сбою /login-failed.JSP-страница.

Вот мой взгляд на это: tomcat действует на перенаправление меня на страницу входа в систему, но не читает conf / tomcat-users.xml для проверки моего логина (даже после нескольких перезагрузок).

Что вы об этом думаете ? Конфигурация: Tomcat 7.0.23, Eclipse-Indigo
5   4   2012-07-08 13:42:43

5 ответов:

Следуя предложению @pd40, я попробовал примеры / jsp / security / protected / examples, но не в Eclipse IDE, где Tomcat обычно встроен вместе с другими серверами (Glassfish, JBoss и т. д..), скорее я запустил сервер tomcat как Автономный (в его каталоге /bin).. и там это работает.

Но когда он попытался запустить веб-приложение на основе безопасности в Tomcat в Eclipse, он снова потерпел неудачу, даже используя конфигурацию, описанную выше.

Не знаю, смогу ли я ... я прав, но безопасность веб-приложений поддерживается только тогда, когда tomcat работает вне eclipse..

Пример tomcat web.xml включает в себя следующий раздел ниже <login-config>:

<!-- Security roles referenced by this web application -->
<security-role>
  <role-name>role1</role-name>
</security-role>
<security-role>
  <role-name>tomcat</role-name>
</security-role>

Который вам может понадобиться.


Tomcat включает в себя пример войны, который содержит auth с использованием tomcat-пользователей.xml похож на то, что вы пытаетесь сделать. Еслиtomcat home/webapps/examples развернут, попробуйте обратиться к http://localhost/examples/jsp/security/protected/. Убедитесь, что XML-комментарии вокруг раздела роль / пользователь tomcat-users.xml были удалены. Они закомментированы по умолчанию.

<!-- Un comment me 
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->

Вы можете рассмотреть возможность увеличения регистрации, чтобы помочь диагностировать проблему auth.

Мне уже слишком поздно отвечать, но, возможно, кто-то, кто придет сюда, найдет это полезным.

На самом деле, если вы столкнулись с проблемой невозможности заставить конфигурацию tomcat работать через eclipse и работать вне ее, то просто удалите сервер из вкладки серверы eclipse и добавьте снова. Это должно решить проблему.

Вы ограничили доступ к своему контенту посредством определение защищенных страниц в сети.xml:

<url-pattern>/*</url-pattern>

Этот подстановочный знак относится ко всем страницам в контенте path. Таким образом, вы получаете бесконечный цикл перенаправлений на страницу входа.

Я обнаружил, что если изменить конфигурацию пользователей в tomcat-пользователи.xml, который встроен в eclipse вы должны перезапустить eclipse не только сервер, чтобы новые пользователи были распознаны. Я думаю, что eclipse скрывает пользователя tomact.XML-файл.