Безопасные веб-приложения в Tomcat - PullRequest
2 голосов
/ 01 марта 2012

У меня есть веб-приложение, которое работает в Apache Tomcat, я использовал «j_security_check» для защиты этого приложения.Мой код выглядит следующим образом:

login.jsp

<div id="loginForm">
    <form id="loginfrm" method="post" action="j_security_check">
        <table>
            <tr>
                <td>User Name</td>
                <td><input type="text" id="name" name="j_username" size="20" /></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" id="phone" name="j_password" size="20" /></td>
            </tr>
            <tr>
                <td></td>
                <td align="right"><input type="submit" value="Login" id="submitButton"></td>
            </tr>
        </table>
    </form>    
</div>

web.xml

<web-app ...>
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>Example Form-Based Authentication Area</realm-name>
        <form-login-config>
            <form-login-page>/success.jsp</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
    </login-config>
</web-app>

Страница ошибки,

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Login ERROR!</h1>
    </body>
</html>

Страница успеха

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Login Success</h1>
    </body>
</html>

Здесь, когда я даю неправильное имя пользователя и неверный пароль, страница ошибки отображается успешноно когда я даю правильный пароль и имя пользователя, оно показывает:

HTTP Status 400 - Invalid direct reference to form login page

type Status report

message Invalid direct reference to form login page

description The request sent by the client was syntactically incorrect (Invalid direct reference to form login page).
Apache Tomcat/7.0.22

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

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Линия:

<form-login-page>/success.jsp</form-login-page>

в web.xml должно быть:

<form-login-page>/login.jsp</form-login-page>

Это сообщает tomcat, что когда вы заходите на защищенную страницу, форма входа находится в login.jsp. Чего не хватает, так это определения защищенных страниц, которые на самом деле нуждаются в проверке подлинности:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>
      Entire Application
    </web-resource-name>
    <url-pattern>/success.jsp</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name> 'the name of the group with access' </role-name>
  </auth-constraint>
</security-constraint>

И определение realm, которое является вашим хранилищем для пар имя пользователя / пароль ( tomcat realm ).

С этими изменениями, когда вы нажмете http://localhost:8080/succes.jsp, вы будете перенаправлены на страницу входа в систему, и после получения действительного набора учетных данных отправитесь на /success.jsp, а с неверным набором учетных данных на /error.jsp.

1 голос
/ 18 декабря 2012

Мало что я сделал, чтобы решить мою проблему. Надеюсь, тебе это тоже поможет.

1- Изменить это:

<form id="loginfrm" method="post" action="j_security_check">

до:

<form method="POST" action="<%=request.getContextPath()%>/j_security_check">  

2 - Очистить кеш.

3- Вместо ввода

http://somelocalhost:8080/you_web_app_name/some_login.jsp

Тип:

http://somelocalhost:8080/you_web_app_name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...