2013-03-15 2 views
0

Я начинаю исследовать мир Servlets и JSP и успешно создал систему входа в систему. Но его реализация не такая совершенная, как я ее исключил.Вход в систему пропускает аутентификацию сервлета при изменении URL-адреса

Senario:

1> Пользователь вводит имя пользователя и пароль в index.jsp.

2> Запрос отправляется в сервлет (login.login.java)

3> сервлет подключается к базе данных и проверяет, является ли пользователь действительным или нет. (С использованием LoginBean.java, LoginDB.java и GetConnection.java т.е. класс компонента, базы данных QueryClass и DB соединения класса соотв)

4> Если пользователь подтверждено,

5> Пользователь перенаправляется на главную .jsp

еще

error.jsp (Это просто реплика index.jsp некоторых сообщений, добавленных)

Проблемы:

1> если я просто открываю index.jsp в своем браузере и меняю URL-адрес на home.jsp Я могу обойти сервлет.

2> Если я попытаюсь сохранить пароль в mysql, используя MD5 i.e PASSWORD ('mypass'), я не аутентифицирован.

это мой doPOST Метод


    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String user = request.getParameter("user"); 
     String pass = request.getParameter("pass"); 
     LoginBean bean = new LoginBean(); 
     bean.SetUser(user); 
     bean.SetPass(pass); 
     bean = LoginDB.check_login(bean); 
     if (bean.isValid()) { 
      HttpSession session = request.getSession(true); 
      session.setAttribute("currentSessionUser", user); 
      response.sendRedirect("home.jsp"); 
     } else { 
      response.sendRedirect("Error.jsp"); 
     } 
    } 

I tired to Modify my Home.jsp and check for a valid session before loading the page. Using the Following

<% 
    if(!session.isNew()) 
    { 
     response.sendRedirect("index.jsp"); 
    } 
%> 

Это Фиксирует URL нюхают, но он останавливает действительных пользователей от того, чтобы перенаправлены home.jsp

UPDATE:

As Предлагаемый JB Nizet Я пытаюсь реализовать фильтры по этому вопросу. Но, как я уже сказал, я ученик, поэтому я не совсем уверен, как этого добиться:

Что мне нужно сделать в моем методе doFilter?

я преобразовал ServletRequest Объекта для HttpRequest Объекта

использования

HttpServletRequest REQ = (HttpServletRequest) запроса;

Теперь, используя этот объект req, как я на самом деле нажал кнопку sumbit или был напрямую изменен URL-адрес для обхода сервлета?

Прошу прощения, это должно быть очень элементарно, но я нахожусь в этой голове часами. Пожалуйста, помогите мне

С уважением

Genocide_Hoax

+0

Для первого вопроса, проверьте значение сеанса в JSP, для второго, что происходит? подробнее ... –

+0

Вы имеете в виду, что мне нужно проверить атрибут сеанса, когда мой home.jsp загружает и перенаправляет пользователя в index.jsp, если значение не задано. Я устал его реализовывать, но все напрасно. Можете ли вы помочь мне достичь этого? –

+0

И для второго вопроса. Я сохраняю свое значение в базе данных, используя insert в значение users ('admin', password ('admin'). И я пытаюсь войти в систему с помощью admin, а admin отправляет меня на неверную страницу входа, то есть я не получаю Authenticated. Где, как если бы я вставлял значение, используя вставку в значения пользователей («admin», «admin»), все работает нормально. –

ответ

1

Не используйте Session.isNew(). Обработка сеанса и аутентификация - это две разные вещи.Неавторизованный пользователь может (и будет) иметь не новый сеанс.

Вы должны использовать сервлет-фильтр, который будет перехватывать каждый запрос, отправленный в ваше приложение. Этот фильтр должен проверить, нуждается ли запрашиваемый URL для аутентификации. Если это так, и если текущий пользователь не аутентифицирован, он должен перенаправить на страницу входа.

После аутентификации вы должны сохранить идентификатор пользователя в сеансе. Это позволит разграничить аутентифицированный сеанс от не аутентифицированного. И это также позволит получить доступ к текущему пользователю в приложении.

Конечно, не забудьте указать URL-адрес входа в набор URL-адресов, для которых требуется аутентификация.

Фильтр более безопасный и чистый, чем проверка подлинности на каждой странице. Это делает вещи централизованными, избегает повторения одного и того же кода снова и снова и не имеет никакого риска забыть добавить требуемую проверку на некоторых страницах.

Также, пожалуйста, соблюдайте соглашения об именах Java. Методы начинаются с строчной буквы в Java.

+0

Спасибо lot Nizet. Но, как я уже сказал, я новичок в мире сервлетов и JSP, и я не уверен, как этого добиться. Можете ли вы разместить ссылки, используя которые я могу узнать, как внедрять сервлет-фильтры в моем приложении. –

+0

Google - ваш друг. Google для «учебника по сервлет-фильтру», и вы найдете несколько из них. –

+0

да, я знаю это, но я надеялся на что-то, что вы можете порекомендовать. –

Смежные вопросы