Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Кто знает как правильно это сделать? / 22 сообщений из 22, страница 1 из 1
10.08.2006, 14:55
    #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
10.08.2006, 16:04
    #33910929
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
авторВ бине есть метод boolean login, который сравнивает переданый ему user и password с БД и возвращает true или false в process.jsp.
В бине д.б. только сеттеры и геттеры.
Лучше с jsp получаем логин и пароль, в сервлете проверяем. Если все Ок, ложим в сессию бин с данными пользвателя. А на др странице проверяем его наличие.
...
Рейтинг: 0 / 0
10.08.2006, 16:15
    #33910993
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
А еще лучше использовать фильтр. Т.е все как сказал ТимоН , т.е. кладем в сессию бин с данными пользователя, (например userInfo). А вот проверять наличие бина не на другой странице, а в фильтре, иначе придется проверять наличие бина на каждой странице.
...
Рейтинг: 0 / 0
10.08.2006, 16:25
    #33911044
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
авториначе придется проверять наличие бина на каждой странице. :)
я имел ввиду создать сервлет с проверкой и унаследовать от него все страници каторым нужна авторизация. Но с фильтрами как-то удобнее.
...
Рейтинг: 0 / 0
10.08.2006, 16:29
    #33911055
Diletant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
Че то как-то тяжеловато, а по проще нет решения? А вообще есть какие нибудь паттерны - процесс логина на jsp, не трогая сервлеты. Ведь можно просто даже без бина - на первой же страничке jsp сравнить user и password c БД. Но это наверно будет не очень красиво, с точки зрения максимального разделения логики и дизайна.

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

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

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

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

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

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

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

вся логика - в бинах! сервлет только собирает параметры запроса, проверяет на валидность, передает данные бину, разбирает результат, приводит его к виду, понятному для jsp и рулит форвардами с помощью RequestDispatcher.
...
Рейтинг: 0 / 0
11.08.2006, 10:50
    #33912409
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
авторвся логика - в бинах! сервлет только собирает параметры запроса, проверяет на валидность, передает данные бину, разбирает результат, приводит его к виду, понятному для jsp и рулит форвардами с помощью RequestDispatcher.
Вы че??? какая в бинах логика???
Код: plaintext
1.
2.
3.
4.
 class  bean{
 private   int  i;
 void  setI( int  i){...}
 int  getI(){...}
}
авторпередает данные бину поясните...
...
Рейтинг: 0 / 0
11.08.2006, 13:50
    #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
11.08.2006, 14:52
    #33913473
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
а по сабжу, фильтр - это лучшее решение.

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

фильтр мапим, например, на /private/*. в фильтре просто проверяем, есть ли ключик в сессии, если есть - пускаем дальше, нет - редиректим на страницу аутентификации.
...
Рейтинг: 0 / 0
11.08.2006, 15:16
    #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
11.08.2006, 15:54
    #33913695
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
DiletantВот я упертый, несмотря на то,что это просто делается при помощи сервлета, я все таки написал на jsp, к сожалению не работает. Логика хоть правильная?
у меня под полом стучит. Где ошибка???
Что не работает?
а теперь смотри, что будет если пользователь в браузере наберет
http://address.to.prog:8080/mycoolprog.welcome.jsp
?
...
Рейтинг: 0 / 0
11.08.2006, 16:01
    #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
11.08.2006, 16:04
    #33913726
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
думаю при попытке сделать форвард в jsp он ругнется на response has already been commited.
вы на php писали до этого чтоли?
...
Рейтинг: 0 / 0
11.08.2006, 16:45
    #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
11.08.2006, 17:19
    #33913991
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как правильно это сделать?
а так?
Код: plaintext
1.
2.
<jsp:useBean id="bean"  class ="my.package.dbaseBean" scope="request"/>
<jsp:setProperty name="bean" property="*"/>
...
Рейтинг: 0 / 0
14.08.2006, 09:15
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Кто знает как правильно это сделать? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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