Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Аутентификация, авторизация в swing приложении: как реализовать? / 25 сообщений из 26, страница 1 из 2
26.09.2014, 15:29
    #38759036
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Всем привет!
Пишу простое приложение - десктопное, которое дергает данные из базы данных, дополняет информационные справочники, делает некую аналитику, выводит отчет.
На данном этапе хочу реализовать вход для пользователей и ограничение по функционалу например на уровне доступа к компонентам.
По аутентификации набросал схемку:

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

По авторизации как думаете паттерн стратегия применим для ограничения пользователей или все таки нужно раздавать привилегии на уровне базы данных?
Спасибо!
...
Рейтинг: 0 / 0
26.09.2014, 15:41
    #38759060
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.HofmannПросьба поправить если есть какие-то не точности, если кто считает что это ерунда предложите свой вариант решения или поделитесь своими мыслями. Либо наиболее простым работающим вариантом.

Ерунда, потому что...
Существует два типа систем. Один, которые нужно обезопасить. В вашем сценарии клиентский код инструментируется и получает доступ без проверки паролей. Поэтому до безопастности вашей схеме ещё очень далеко.
Второй, когда ввод пароля это условность. Например система работает в интранете клиента, и там нет ничего секретного, любой сотрудник может получить нужные данные в оффлайне. Для этого случая у вас слишком всё заморочено - соль, серверная проверка, временная таблица.

Dr.HofmannПо авторизации как думаете паттерн стратегия применим для ограничения пользователей или все таки нужно раздавать привилегии на уровне базы данных?

Я думаю, что вам нужно научится не тыкать паттерны куда попало. Особенно если вы не понимаете их назначения. И начать с каких-то базовых вещей, таких как Abstract Layer и Single Responsibility Principle.


В 2-tier системах, обычно используюется Security на уровне БД. Зачем вам изобретать что-то своё, если можно в SQL Server 2008 создать юзеров, задать пароли и раздать права на таблицы и базы.
...
Рейтинг: 0 / 0
26.09.2014, 15:43
    #38759065
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
А если писать приложение под винду, то я бы вообще делал SSO с ActiveDirectory.
...
Рейтинг: 0 / 0
26.09.2014, 15:54
    #38759085
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmannпаттерн стратегия
прям паранойя какая-то)
У нас есть что защищать, перед тем как систему строить?
Может лучше трафик до БД шифровать? Чтобы ИС не трогать?
...
Рейтинг: 0 / 0
26.09.2014, 16:00
    #38759095
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторпрям паранойя какая-то)

Ну хорошо хорошо это мое предположение не более того.
авторМожет лучше трафик до БД шифровать? Чтобы ИС не трогать?
Какие есть варианты?
...
Рейтинг: 0 / 0
26.09.2014, 16:00
    #38759096
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
...
Рейтинг: 0 / 0
26.09.2014, 16:05
    #38759100
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.HofmannКакие есть варианты?
- их привели выше:
- Win авторизация / SSO / IPSec
- сначала сделать "ГУИ разное от роли", что сложнее.
А все вызовы обернуть try чтобы юзверь увидел ошибку ОТ СЕРВЕРА - У вас недостаточно прав на данную операцию.
...
Рейтинг: 0 / 0
26.09.2014, 16:29
    #38759137
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann, по всей вуидимости у тебя двузвенка. Поэтому надо исходить из того
что все бинари и исходники доступны пользователю на рабочей станции. Следовательно
всю информацию о секретных ключах и хешах нужно убрать из клиента в вынести
его в сервер. В роли этого сервера у тебя выступает БД (так сложилось) поэтому
и аутентификацию надо реализовывать теми средствами что есть в БД.

Выдумывать всякие соли и хеш даты нет никакого смысла. Заводи каждому
пользователю учётку в БД.
...
Рейтинг: 0 / 0
30.09.2014, 09:56
    #38761523
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторВ 2-tier системах, обычно используюется Security на уровне БД. Зачем вам изобретать что-то своё, если можно в SQL Server 2008 создать юзеров, задать пароли и раздать права на таблицы и базы.

авторВыдумывать всякие соли и хеш даты нет никакого смысла. Заводи каждому
пользователю учётку в БД.

Я правильно понимаю,
Что просто делаю форму аутентификации и передаю логин пароль:
Сюда:
Код: java
1.
2.
3.
ConnectMSSQLServer sqlConnect = new ConnectMSSQLServer();
       sqlConnect.dbConnect("jdbc:sqlserver://192.168.25.115:1433;databaseName=arm",
              "arm", "1q2w3e4r!");



Каждый раз когда это необходимо?
...
Рейтинг: 0 / 0
30.09.2014, 10:02
    #38761532
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.HofmannЧто просто делаю форму аутентификации и передаю логин пароль:
Сюда:
Код: java
1.
2.
3.
ConnectMSSQLServer sqlConnect = new ConnectMSSQLServer();
       sqlConnect.dbConnect("jdbc:sqlserver://192.168.25.115:1433;databaseName=arm",
              "arm", "1q2w3e4r!");



Каждый раз когда это необходимо?
Ну, грубо-говоря да. Не очень понятно про "каждый" раз. Обычно, DataSource создается единожды.
Есть и альтернативные варианты, которые позволяют не хранить пароль в памяти. Но вам пока можно не заморчиваться.
...
Рейтинг: 0 / 0
30.09.2014, 11:11
    #38761646
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторНе очень понятно про "каждый" раз. Обычно, DataSource создается единожды.

правильно понимаю он делается статическим.
+ создаем гетер на DataSource?
...
Рейтинг: 0 / 0
30.09.2014, 11:50
    #38761710
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.HofmannавторНе очень понятно про "каждый" раз. Обычно, DataSource создается единожды.

правильно понимаю он делается статическим.
+ создаем гетер на DataSource?
У тебя - десктоп:
2 варианта
- MS рекомендует коннект при создании окна
- проще (я делал) коннект при открытии приложения + протаскивать коннект в каждое окно в конструкторе.
А дальше уже по вкусу.
...
Рейтинг: 0 / 0
30.09.2014, 14:53
    #38762105
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Я-бы не стал дергать в каждой формочке коннект без крайней необходимости.
Лучше попробовать isValid
http://stackoverflow.com/questions/847246/what-is-the-best-way-to-ping-a-database-via-jdbc
...
Рейтинг: 0 / 0
06.10.2014, 11:55
    #38767652
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторУ тебя - десктоп:
2 варианта
- MS рекомендует коннект при создании окна
- проще (я делал) коннект при открытии приложения + протаскивать коннект в каждое окно в конструкторе.
А дальше уже по вкусу.

Комрады мы говорим с вами про DriverManager: ???
или DataSource ???
Я так понял понял что для swing приложений используется DriverManager с jdbc url-ом, а DataSource jndi именами для EE? поправте если ошибаюсь.

авторЯ-бы не стал дергать в каждой формочке коннект без крайней необходимости.
Лучше попробовать isValid
http://stackoverflow.com/questions/847246/what-is-the-best-way-to-ping-a-database-via-jdbc


Такой ход мысли???

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private Connection connection = null;

public Connection getConnection() {
  try {
    if ( connection.isClosed() ) {
      // Start afresh.
      connection = null;
    }
    // ** More tests here to check connection is ok.
    if (connection == null) {
      // Make a new connection.
      connection = Connections.getConnection(alias);
    }
  } catch (SQLException ex) {
    // Cause a NPE further down the line.
    connection = null;
  }
  return connection;
}
...
Рейтинг: 0 / 0
06.10.2014, 12:04
    #38767669
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann, я пишу про использование метода isValid

http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#isValid(int)
...
Рейтинг: 0 / 0
06.10.2014, 12:17
    #38767692
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann,
- выше 20 строк абсолютно ничего не делают.
- если у нас десктоп, то только ты своим кодом владеешь коннектом.
Поэтому выключаем автокоммит, таймаут = длинные транзакции.
БД и её возможности используем по полной.
(чтобы не писать такой шум на 20 строк)
...
Рейтинг: 0 / 0
06.10.2014, 12:38
    #38767723
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторDr.Hofmann, я пишу про использование метода isValid

http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#isValid(int)


авторDr.Hofmann,
- выше 20 строк абсолютно ничего не делают.
- если у нас десктоп, то только ты своим кодом владеешь коннектом.
Поэтому выключаем автокоммит, таймаут = длинные транзакции.
БД и её возможности используем по полной.
(чтобы не писать такой шум на 20 строк)


около???
Код: java
1.
2.
3.
4.
5.
6.
private Connection getConnection() {
       try {
           if (connection != null) {
               if (connection.isClosed() || !connection.isValid(10000)) {
                  connection = Connections.getConnection(alias);
               }
...
Рейтинг: 0 / 0
06.10.2014, 12:53
    #38767749
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann,
коннект это обычная переменная.
Ты же все переменные на null не проверяешь?

Код: java
1.
2.
3.
4.
5.
6.
7.
public class Main {
	private static final String url = "jdbc:postgresql://2222222222/postgres";
	public static void main(String[] args) {
		try {
			DriverManager.registerDriver(new org.postgresql.Driver());
			Object connection = DriverManager.getConnection(url, userName,
					userPassword);
...
Рейтинг: 0 / 0
06.10.2014, 14:23
    #38767888
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторконнект это обычная переменная.
Ты же все переменные на null не проверяешь?


автор- проще (я делал) коннект при открытии приложения + протаскивать коннект в каждое окно в конструкторе.

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

Уже каша в голове логика такая должна быть?

...
Рейтинг: 0 / 0
06.10.2014, 14:27
    #38767895
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann , я тебя прошу не флудить картинками. Они безсмысенны т.к. ты используешь
свою собственную систему обозначений flow алгоритма не совместимую с UML и непонятную
для большинства.

Пиши лучше кодом или текстом.
...
Рейтинг: 0 / 0
06.10.2014, 14:33
    #38767910
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann,
действительно. Твои картинки странные.
В чём вопрос?
....
Т.к. жизненный цикл всех окон я контролирую (закрытие и открытие).
То, логично, в 3 класса окна, в конструкторе передать Conn.
Что непонятно?
При закрытии приложения прибить коннект.
...
Рейтинг: 0 / 0
06.10.2014, 15:35
    #38768013
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторDr.Hofmann,
действительно. Твои картинки странные.
В чём вопрос?
....
Т.к. жизненный цикл всех окон я контролирую (закрытие и открытие).
То, логично, в 3 класса окна, в конструкторе передать Conn.
Что непонятно?
При закрытии приложения прибить коннект.


авторDr.Hofmann, я тебя прошу не флудить картинками. Они безсмысенны т.к. ты используешь
свою собственную систему обозначений flow алгоритма не совместимую с UML и непонятную
для большинства.

Пиши лучше кодом или текстом.


Извините пожалуйста что саботировал ваш мозг своими картинками.

Я просто размышляю вслух и пытаюсь написать код наиболее приемлемым-подходящим образом:
Код: java
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
 */
package connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *

 */
public class anotherConnection {
    
    private Connection conn = null;
    
    public anotherConnection(String db_connect_string, String db_userid, String db_password) throws ClassNotFoundException{
        
        try {
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
     
         conn = DriverManager.getConnection(db_connect_string,
                  db_userid, db_password);
        
         } catch (Exception e) {
         
             e.printStackTrace();
      
         }
}
    
   public Connection getanotherConnection(String db_connect_string, String db_userid, String db_password) throws SQLException{
       if(!conn.isValid(10)){
            conn = DriverManager.getConnection(db_connect_string,
                  db_userid, db_password);
       }
    return conn;
}
       
   
   public void CloseConnection() throws SQLException{
       
       this.conn.close();
   }
   
...
Рейтинг: 0 / 0
06.10.2014, 15:51
    #38768051
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann,
ну дак, и пишите Приложение, а не класс MyConnection - он уже есть.
Зачем вам геттер?
Вместо 2-х строк стало 55.
Вместо USER PASS тоже 2 класса будет?
...
Рейтинг: 0 / 0
06.10.2014, 16:10
    #38768109
Dr.Hofmann
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
авторЗачем вам геттер?

Чтоб не писать каждый раз, нечто подобное:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           

       ConnectMSSQLServer sqlConnect = new ConnectMSSQLServer();
       sqlConnect.dbConnect("jdbc:sqlserver://192.168.25.115:1433;databaseName=arm366",
              "arm", "1q2w3e4r!");
       
       
// TODO add your handling code here:
    }                                          



а вызывать getanotherConnection когда это необходимо.

авторВместо USER PASS тоже 2 класса будет?

Я плохо понял вопрос честно говоря.
...
Рейтинг: 0 / 0
06.10.2014, 16:32
    #38768154
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аутентификация, авторизация в swing приложении: как реализовать?
Dr.Hofmann,
я говорил про 2 варианта архитектуры:
1) передавать коннект в окно-контейнер
2) при создании окна-контейнера написать ЭТИ 2 строки.
Окно контейнер ты неделю проектируешь.
Про какой случай говорим?
ЗЫ
- В менюшках не нужен коннект.
- "каждый раз" понятие относительное....оверхед - тоже
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Аутентификация, авторизация в swing приложении: как реализовать? / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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