powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Кто знает как правильно это сделать?
22 сообщений из 22, страница 1 из 1
Кто знает как правильно это сделать?
    #33910716
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо реализовать авторизацию по средствам JSP я хочу сделать это так -первая страничка - login.jsp имеет простую форму где два поля user и password и кнопка submit, после нажатия submit, user и password передается process.jsp, которая использует бин, в который передает user и password. В бине есть метод boolean login, который сравнивает переданый ему user и password с БД и возвращает true или false в process.jsp. В process.jsp есть условие, что если возвращается true, тогда переход на index.jsp, если false то на login.jsp. Естественно используется сессия.
Как по Вашему мнению, это хороший способ или есть лучше?
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33910929
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ бине есть метод boolean login, который сравнивает переданый ему user и password с БД и возвращает true или false в process.jsp.
В бине д.б. только сеттеры и геттеры.
Лучше с jsp получаем логин и пароль, в сервлете проверяем. Если все Ок, ложим в сессию бин с данными пользвателя. А на др странице проверяем его наличие.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33910993
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше использовать фильтр. Т.е все как сказал ТимоН , т.е. кладем в сессию бин с данными пользователя, (например userInfo). А вот проверять наличие бина не на другой странице, а в фильтре, иначе придется проверять наличие бина на каждой странице.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33911044
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авториначе придется проверять наличие бина на каждой странице. :)
я имел ввиду создать сервлет с проверкой и унаследовать от него все страници каторым нужна авторизация. Но с фильтрами как-то удобнее.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33911055
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Че то как-то тяжеловато, а по проще нет решения? А вообще есть какие нибудь паттерны - процесс логина на jsp, не трогая сервлеты. Ведь можно просто даже без бина - на первой же страничке jsp сравнить user и password c БД. Но это наверно будет не очень красиво, с точки зрения максимального разделения логики и дизайна.

Был бы очень благодарен ответившим, если бы Вы нашли время и написали листинг, предлогаемых Вами решений!

Спасибо в любом случае откликнувшимся!
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33911177
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiletantЧе то как-то тяжеловато, а по проще нет решения? А вообще есть какие нибудь паттерны - процесс логина на jsp, не трогая сервлеты. Ведь можно просто даже без бина - на первой же страничке jsp сравнить user и password c БД. Но это наверно будет не очень красиво, с точки зрения максимального разделения логики и дизайна.

Был бы очень благодарен ответившим, если бы Вы нашли время и написали листинг, предлогаемых Вами решений!

Спасибо в любом случае откликнувшимся!
Вам шашечки или ехать? (с)
То что здесь написано - типовое решение. По поводу проверки на первой странице: а если пользователь сразу выберет другую страницу с супер-пупер секретными данными, как узнать на этой супер-пупер секретной странице - проверился пользователь на login/password или нет?
Еще есть одно типовое средсто смотреть в сторону спецификации сервлетов и искать Form Based Authentication и прочее. (j_security_check, j_username и т.д.)
Листинг придется самому, так лучше если что, думаю помогут, да и примеры в сти должны быть.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912043
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю, что изобретать велосипед не всегда хорошо, эту задачу можно просто решить при помощи сервлета, который сам конектится к БД и проверяет user и password, и при соответствии перенаправляет на другой сервлет, который будет являться управляющим сервлетом в моделе Model-View-Controller. Но тогда это наверно будет уже извращенное использование патернов, так как добавляется сервлет логина.

Какую модель для логина по Вашему мнению лучше использовать: servlet+db или jsp+bean+db

А Вы как реализуете процесс логина?

P.S. Способ с стандартными средствами Томката не предлогать, надо чтобы вся инфа, в данном случае user и password хранилась в БД.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912187
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКакую модель для логина по Вашему мнению лучше использовать: servlet+db или jsp+bean+db
Никакую.
Допустим вы пишете какой нибудь проект (jsp+bean+db допустим), он постоянно растет, логика все сложнее. А потом в какой нибудь момент нужно полностью изменить дизайн, будете плакать кровавыми слезами разбираясь в этой каше. Поэтому вся логика (соединение с БД, проверки ...) в сервлетах. Отображение информации на jsp и только отображение !!!! А информацию, из БД допустим, проще хранить в бинах, коллекциях в сессии.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912195
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще совет, посмотрите в сторону Struts, на многое откроются глаза....
Удачи.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912247
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет, но я только начал изучать j2ee, надо пару приложений без фреймворков наверно написать, проникеуться азами, а потом конечно доберусь до Struts )))
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912346
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Diletant P.S. Способ с стандартными средствами Томката не предлогать, надо чтобы вся инфа, в данном случае user и password хранилась в БД.
а чем котяра не угодил? можно его настроить на твою базу с изерами и он остальное сделает за тебя..
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912392
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНПоэтому вся логика (соединение с БД, проверки ...) в сервлетах. Отображение информации на jsp и только отображение !!!! А информацию, из БД допустим, проще хранить в бинах, коллекциях в сессии.

вся логика - в бинах! сервлет только собирает параметры запроса, проверяет на валидность, передает данные бину, разбирает результат, приводит его к виду, понятному для jsp и рулит форвардами с помощью RequestDispatcher.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33912409
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвся логика - в бинах! сервлет только собирает параметры запроса, проверяет на валидность, передает данные бину, разбирает результат, приводит его к виду, понятному для jsp и рулит форвардами с помощью RequestDispatcher.
Вы че??? какая в бинах логика???
Код: plaintext
1.
2.
3.
4.
 class  bean{
 private   int  i;
 void  setI( int  i){...}
 int  getI(){...}
}
авторпередает данные бину поясните...
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913213
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНot]
Вы че??? какая в бинах логика???
Код: plaintext
1.
2.
3.
4.
 class  bean{
 private   int  i;
 void  setI( int  i){...}
 int  getI(){...}
}
авторпередает данные бину поясните...

гм... я имел ввиду ejb beans. если без ejb, то нужно использовать отдельные классы типа ClientManager.
тогда действия сервлета (например, переименование клиента):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
//парсим данные
 int  id =  new  Integer(request.getParameter(ClientServlet.CLIENT_ID_PARAMETER));
String name = request.getParameter(ClientServlet.CLIENT_NAME_PARAMETER);
//подготавливаем и проверяем данные
 if  (name== null  || name.length()< 0 ) {
   //рулим форвардами
   RequestDispatcher disp = request.getRequestDispatcher("/error.jsp");
   request.setAttribute(ClientServlet.ERROR_KEY, "Не указано имя");
   disp.forward(request, response);
}
name =  new  String(name.getBytes("ISO-8859"), "utf-8");
//передаем данные и разбираем результат
Client client = getClientManager().updateName(id, name);
//приводим к виду, понятному для jsp
request.getSession().setAttribute(ClientServlet.CLIENT_KEY, client);
response.sendRedirect("/success.jsp");
при таком подходе ClientManager будет общим как для web приложения, так и для любого другого (например, Swing).
Действия по соединению с БД выносятся опять же в отдельный класс (например, ConnectionManager), который используется ClientManager и сервлету про него знать не надо - он избавлен от деталей реализации хранения данных.

В идеале конечно лучше ClientManager сделать интерфейсом, тогда для сервлета (а также и swing приложения) будет прозрачна подмена реализации в виде простого класса на ejb bean.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913473
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а по сабжу, фильтр - это лучшее решение.

должен быть аутентифицирующий сервлет (LoginServlet), который собирает логин + пароль, ищет пользователя с такими данными, если нашел - кладет ключик (например, самого пользователя) в сессию и перенаправляет дальше, если нет - снова кидает на страницу аутентификации.

фильтр мапим, например, на /private/*. в фильтре просто проверяем, есть ли ключик в сессии, если есть - пускаем дальше, нет - редиректим на страницу аутентификации.
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913566
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот я упертый, несмотря на то,что это просто делается при помощи сервлета, я все таки написал на jsp, к сожалению не работает. Логика хоть правильная?

login.jsp:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<html>
  <head><title>Simple jsp page</title></head>
  <body>
  <form action="loginwork.jsp" method="post">
  <table align="center">
      <tr >
      <td> User: </td> <td><input type="text" name="user"></td>
      </tr>
      <tr>
      <td> Password: </td> <td> <input type="password" name="password"> </td>
      </tr>
      <tr align="center"> td><input type="submit" value="Login"> </td>
      </tr>
  </table>
  </form>
 </body>
</html>

loginwork.jsp:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="Bean"  class ="dbaseBean" type="dbaseBean"/>  
<html>
  <head><title>Simple jsp page</title></head>
  <body>
   <% String user = request.getParameter("user");
        String password = request.getParameter("password");
        String destination;
         if  (Bean.login(user, password)) {
           destination = "login.jsp";
        }  else  {
           destination = "welcome.jsp";
        }
    %>
  <jsp:forward page="<%=destination%>"/>
  </body>
</html>

dbaseBean:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
  import  java.sql.*;
      public   class  dbaseBean {
   boolean  login(String userName,String Password) {
     try  {
       Class .forName("com.mysql.jdbc.Driver");
      Connection con =
        DriverManager.getConnection("jdbc:mysql://localhost/t3", "root", "");
      System.out.println("got connection");
      Statement s = con.createStatement();
      String sql = "SELECT UserName FROM Users" +
        " WHERE UserName='" + userName + "'" +
        " AND Password='" + Password + "'";
      ResultSet rs = s.executeQuery(sql);
       if  (rs.next()) {
        rs.close();
        s.close();
        con.close();
         return  true;
      }
        rs.close();
        s.close();
        con.close();
    }
     catch  (ClassNotFoundException e) {
      System.out.println(e.toString());
    }
     catch  (SQLException e) {
      System.out.println(e.toString());
    }
     catch  (Exception e) {
      System.out.println(e.toString());
    }
     return  false;
  }
}
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913695
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiletantВот я упертый, несмотря на то,что это просто делается при помощи сервлета, я все таки написал на jsp, к сожалению не работает. Логика хоть правильная?
у меня под полом стучит. Где ошибка???
Что не работает?
а теперь смотри, что будет если пользователь в браузере наберет
http://address.to.prog:8080/mycoolprog.welcome.jsp
?
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913710
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и до кучи, что мешает написать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 boolean  login(String userName, String password) {
     boolean  result;
     try  {
      // bla-bla-bla
      String sql = "SELECT UserName FROM Users" +
        " WHERE UserName='" + userName + "'" +
        " AND Password='" + Password + "'";
      // здесь бы неплохо избавиться от динамического SQL и написать через параметры
      ResultSet rs = s.executeQuery(sql);
      result = rs.next();
      rs.close();
      s.close();
      con.close();
      // bla-bla-bla
     return  result;
    }
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913726
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю при попытке сделать форвард в jsp он ругнется на response has already been commited.
вы на php писали до этого чтоли?
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913874
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет того, что просто в браузере набрать http://somehost:8080/myapp/welcome.jsp - это понятно, надо сессиию применять, я интересовался правильна ли логика написана - или нет?
По поводу работает или нет - при переходе к loginwork.jsp томкат пишет ошибку:
An error occurred at line: 9 in the jsp file: /loginwork.jsp
Generated servlet error:
dbaseBean cannot be resolved to a type

Типа не может определить тип бина, в той строке где инициализируется бин, но параметр type как правило не используется, так в книжках написано,

А насчет PHP вы правы - было немного, наверно я еще до конца не проникся концепцией ООП. Стараюсь...
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33913991
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?
Код: plaintext
1.
2.
<jsp:useBean id="bean"  class ="my.package.dbaseBean" scope="request"/>
<jsp:setProperty name="bean" property="*"/>
...
Рейтинг: 0 / 0
Кто знает как правильно это сделать?
    #33915427
Diletant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а у меня бин лежит в \WEB-INF\classes\dbaseBean.class
тоесть при написании строки
Код: plaintext
<jsp:useBean id="Bean"  class ="dbaseBean" type="dbaseBean"/>  
JSP видит этот бин.
Или все-таки лучше все-таки разместить его \WEB-INF\classes\com\somepackage\dbaseBean.class и потом соответствено прописать в JSP ???:
Код: plaintext
<jsp:useBean id="Bean"  class ="com.somepackage.dbaseBean" type="dbaseBean"/>  
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Кто знает как правильно это сделать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]