BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 мар 2024, 15:23

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
СообщениеДобавлено: 20 фев 2015, 12:04 
Не в сети

Зарегистрирован: 07 май 2014, 12:01
Сообщения: 73
Карма: 0
День добрый.
Есть задача ограничить печать на принтера. Что бы кассир не смог напечатать на другой принтер.
при этом используется динамический днс. Как бы заранее нельзя сделать список разрешенных принтеров.
Есть способ проверить ip кассира :
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets)) {
displayInterfaceInformation(netint);
}
}

private static void displayInterfaceInformation( NetworkInterface netint) throws SocketException {
System.out.printf("Display name: %s%n", netint.getDisplayName());
System.out.printf("Name: %s%n", netint.getName());
Enumeration<InetAddress> inetAddresses =netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list(inetAddresses)) { System.out.printf("InetAddress: %s%n", inetAddress); }
System.out.printf("%n");
}
Можно ли активировать какое либо событие например вход кассира, что бы зафиксировать его ip.
и потом при печати проверять его ip и ip принтера.
получается два вопроса:
1. как получить экземпляр PrinterManager в скрипте печати?
2. Существует ли какое либо событие , работающее локально у кассира, желательно при входе, на которое можно повесить свой дополнительный обработчик?
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 14:03 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
bpoleg писал(а):
1. как получить экземпляр PrinterManager в скрипте печати?

зачем там PrinterManager в этой задаче?
сам объект Printer текущий передаётся в методы печати в новых скриптах:
http://bgbilling.ru/v6.2/javadoc/ru/bit ... ilder.html
примеры как напрямую сконструировать сам PrinterManager внутри скрипта тут есть:
http://wiki.bitel.ru/index.php/%D0%9F%D ... _CashCheck

bpoleg писал(а):
2. Существует ли какое либо событие , работающее локально у кассира, желательно при входе, на которое можно повесить свой дополнительный обработчик?
Спасибо.

Это непонятно. Что такое событие работающее локально?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 14:12 
Не в сети

Зарегистрирован: 07 май 2014, 12:01
Сообщения: 73
Карма: 0
Биллинг состоит из двух частей.
Серверная и клиентская.
С серверной части как получить айпи адрес подключившегося пользователя?
В клиентской части можно опросить сетевые интерфейсы, как уже указывал.
Забыл указать версию биллинга, 5.2


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 15:06 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
На клиенте нет никаких событий.
И понятия "подключившегося пользователя" тоже нет на сервере. Каждый запрос обособленный, нет ни сессий ничего подобного, каждый раз передаётся логин-пароль и за судьбой юзера между запросами не следится.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 15:25 
Не в сети

Зарегистрирован: 07 май 2014, 12:01
Сообщения: 73
Карма: 0
Если архитектура основана на вебсервисах, то это понятно.
1. Сервер не понмнит что делал клиент в предыдущий запрос, но сервер может знать откуда пришел запрос и какой пользователь его выполняет?
1.1 Подобие сессии должно быть на клиенте, как - то он должен свое состояние отслеживать?
2. При печати чека как узнать какой принтер выбран? Скрпит бгбс.
получаем check = event.getCheck();
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 15:51 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Вы задаёте вопросы, но не описываете контекста совершенно.
Разумеется, сервере знает откуда пришёл запрос. Другое дело делегируется ли это знание в скрипты, например. В большинстве событий есть такое, userId. Вы про какое событие сейчас? Если формирование чека то там есть тоже такое.
Цитата:
Подобие сессии должно быть на клиенте, как - то он должен свое состояние отслеживать?
какое состояние? зачем? нет там никакой сессии. "сессия" для клиента биллинга - это текущий подключенный сервер и всё. больше состояние никакое не хранится.
Цитата:
2. При печати чека как узнать какой принтер выбран?

что значит "при печати чека"? в момент формирования чека? Ну тогда там же есть всё это: event.getPrinter()

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 16:07 
Не в сети

Зарегистрирован: 07 май 2014, 12:01
Сообщения: 73
Карма: 0
как получить принтер на который идет печать нашел:
Printer pr = event.getPrinter();
print("printer(adres)="+pr.getAddress()+" port="+pr.getPort()+" title="+pr.getTitle());
Можно ли узнать пользователя, который печатает? и с каког айпи он пришел?
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 16:45 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Зачем что-то искать? Вы наугад пишете что ли? Есть же полный API по всем классам.
http://bgbilling.ru/v5.2/javadoc/ru/bit ... Event.html
Там есть userId но скорее всего там будет USER_SERVER т.е. ноль всегда, потому что в общем случае там и юзера то нету, а раньше чек вообще асинхронно печатался.
Но теоретически можно реального юзера передавать когда он есть, что-то можно придумать, наверно. Пишите в HelpDesk.
Айпи не знаю как даже, это вообще задача странная. Скорее всего никак без огромных костылей.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 17:01 
Не в сети

Зарегистрирован: 07 май 2014, 12:01
Сообщения: 73
Карма: 0
нашел и платеж, который печатается, нашел номер пользователя,
но как найти пользователя? и откуда он пришел?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 фев 2015, 18:48 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
bpoleg писал(а):
нашел и платеж, который печатается, нашел номер пользователя,
но как найти пользователя? и откуда он пришел?


Эта информация не передается в событие . Пока никак. Мы можем туда добавить id пользователя, но добавлять откуда он пришел - уже перебор.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 12:35 
Не в сети

Зарегистрирован: 07 май 2014, 12:01
Сообщения: 73
Карма: 0
Мне кажется, что для безопасности ответ на вопрос "откуда пришел" это один из важных акцентов. Может не прав?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 12:52 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
bpoleg писал(а):
Мне кажется, что для безопасности ответ на вопрос "откуда пришел" это один из важных акцентов. Может не прав?


Вы предлагает во все события помещать информацию "откуда пришел" ? Есть система проверки прав, есть логирование запросов, "откуда пришел" есть в access-логах. Пока в обработчиках событий это было никому не нужно, хватало только userId. Мы назначаем права на пользователя и нет ограничений откуда пришел. Если только эту информацию добавить в качестве исключения в это событие для CashCheck.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 13:31 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Ну добавить то можно что угодно при желании, но лично мне кажется, оно будет костылём. Ну и семантика событий этих вовсе не "юзер печатает чек", а просто формирование его вида при любой операции с чеком.
Цитата:
Если только эту информацию добавить в качестве исключения в это событие для CashCheck.
Дело ещё в том, что в новых версиях это не событие, а просто вызов дин.кода. Все эти события упразднены (потому в 5.2 в любом случае делаться не будет ничего такого без отдельного на то указания).

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 15:03 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Для решения своей задачи как-раз делал костыль с определением IP-адреса клиента. Единственное отличие - передавал адрес не в дин. код, а в xsl в личный кабинет. Далее краткое описание решения.

1. В файле web.xml добавляем новый фильтр, например, RemoteHostFilter.
2. Фильтр RemoteHostFilter имеет примерно следующее содержимое:
Код:
/**
 * <p><b>Сохранение удалённого хоста в кеше</b></p>
 * <p>Получает удалённый хост клиента из запроса и сохраняет в локальную переменную потока
 * для будущего использования.</p>
 */
public class RemoteHostFilter implements Filter {
   public void init(FilterConfig filterConfig) throws ServletException {
   }

   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      HttpServletRequest request = (HttpServletRequest) servletRequest;

      RequestDataHolder.setHost(request.getHeader("host"));

      filterChain.doFilter(servletRequest, servletResponse);
   }

   @Override
   public void destroy() {
   }
}

3. Кеш RequestDataHolder имеет примерно следующее содержимое:
Код:
/**
 * <p><b>Сохранение данных запроса локально в каждом потоке</b></p>
 */
public class RequestDataHolder {
   private static final ThreadLocal<String> hostHolder = new ThreadLocal<String>();

   public final static String getHost() {
      return hostHolder.get();
   }
   
   public final static void setHost(String host) {
      hostHolder.set(host);
   }
}

4. В любом скрипте, который обрабатывает запросы пользователей, вызвать getHost для получения адреса клиента.

Идея в том, что для каждого запроса пользователя создаётся свой поток и мы можем сохранить адрес в переменной потока.

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

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 15:55 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
кстати, интересный вариант. может сработать.
эти события и дин.код в новых версиях вызываются синхронно, конечно.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 16:18 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Синхронно не значит в одном потоке. Мой вариант работает только если всё исполняется в одном потоке. Для описанной проблемы нужно допиливать ещё либо искать другие варианты.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 17:06 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
vkulakov писал(а):
Синхронно не значит в одном потоке. Мой вариант работает только если всё исполняется в одном потоке. Для описанной проблемы нужно допиливать ещё либо искать другие варианты.

в общем случае, конечно, не значит.
но здесь обработка запросов идёт в одном потоке и многопоточности нет нигде никакой, тем более если синхронно чего-то там надо.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 19:47 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Перечитал тему с начала и понял, что ничего не понял. Зачем здесь события, если в доках написано "для формирования вида чека использовать динамический код, события устарели". В общем, ждём автора топика.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2015, 20:15 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
в дин.коде того что нужно автору топика тоже нету)

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.082s | 57 Queries | GZIP : On ]