проверка разрешения печати на данный принтер.

Печать кассовых и бумажных чеков по занесению платежа в биллинг.

проверка разрешения печати на данный принтер.

Сообщение bpoleg » 20 фев 2015, 12:04

День добрый.
Есть задача ограничить печать на принтера. Что бы кассир не смог напечатать на другой принтер.
при этом используется динамический днс. Как бы заранее нельзя сделать список разрешенных принтеров.
Есть способ проверить 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. Существует ли какое либо событие , работающее локально у кассира, желательно при входе, на которое можно повесить свой дополнительный обработчик?
Спасибо.
bpoleg
 
Сообщения: 73
Зарегистрирован: 07 май 2014, 12:01

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 20 фев 2015, 14:03

$this->bbcode_second_pass_quote('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

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

Это непонятно. Что такое событие работающее локально?
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: проверка разрешения печати на данный принтер.

Сообщение bpoleg » 20 фев 2015, 14:12

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

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 20 фев 2015, 15:06

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

Re: проверка разрешения печати на данный принтер.

Сообщение bpoleg » 20 фев 2015, 15:25

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

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 20 фев 2015, 15:51

Вы задаёте вопросы, но не описываете контекста совершенно.
Разумеется, сервере знает откуда пришёл запрос. Другое дело делегируется ли это знание в скрипты, например. В большинстве событий есть такое, userId. Вы про какое событие сейчас? Если формирование чека то там есть тоже такое.
$this->bbcode_second_pass_quote('', '')одобие сессии должно быть на клиенте, как - то он должен свое состояние отслеживать?
какое состояние? зачем? нет там никакой сессии. "сессия" для клиента биллинга - это текущий подключенный сервер и всё. больше состояние никакое не хранится.
$this->bbcode_second_pass_quote('', '2'). При печати чека как узнать какой принтер выбран?

что значит "при печати чека"? в момент формирования чека? Ну тогда там же есть всё это: event.getPrinter()
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51
Вернуться к началу

Re: проверка разрешения печати на данный принтер.

Сообщение bpoleg » 20 фев 2015, 16:07

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

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 20 фев 2015, 16:45

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

Re: проверка разрешения печати на данный принтер.

Сообщение bpoleg » 20 фев 2015, 17:01

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

Re: проверка разрешения печати на данный принтер.

Сообщение stark » 20 фев 2015, 18:48

$this->bbcode_second_pass_quote('bpoleg', '')ашел и платеж, который печатается, нашел номер пользователя,
но как найти пользователя? и откуда он пришел?


Эта информация не передается в событие . Пока никак. Мы можем туда добавить id пользователя, но добавлять откуда он пришел - уже перебор.
stark
Разработчик
 
Сообщения: 8343
Зарегистрирован: 08 ноя 2007, 01:05
Откуда: Уфа
Вернуться к началу

Re: проверка разрешения печати на данный принтер.

Сообщение bpoleg » 24 фев 2015, 12:35

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

Re: проверка разрешения печати на данный принтер.

Сообщение stark » 24 фев 2015, 12:52

$this->bbcode_second_pass_quote('bpoleg', '')не кажется, что для безопасности ответ на вопрос "откуда пришел" это один из важных акцентов. Может не прав?


Вы предлагает во все события помещать информацию "откуда пришел" ? Есть система проверки прав, есть логирование запросов, "откуда пришел" есть в access-логах. Пока в обработчиках событий это было никому не нужно, хватало только userId. Мы назначаем права на пользователя и нет ограничений откуда пришел. Если только эту информацию добавить в качестве исключения в это событие для CashCheck.
stark
Разработчик
 
Сообщения: 8343
Зарегистрирован: 08 ноя 2007, 01:05
Откуда: Уфа
Вернуться к началу

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 24 фев 2015, 13:31

Ну добавить то можно что угодно при желании, но лично мне кажется, оно будет костылём. Ну и семантика событий этих вовсе не "юзер печатает чек", а просто формирование его вида при любой операции с чеком.
$this->bbcode_second_pass_quote('', '')сли только эту информацию добавить в качестве исключения в это событие для CashCheck.
Дело ещё в том, что в новых версиях это не событие, а просто вызов дин.кода. Все эти события упразднены (потому в 5.2 в любом случае делаться не будет ничего такого без отдельного на то указания).
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51
Вернуться к началу

Re: проверка разрешения печати на данный принтер.

Сообщение vkulakov » 24 фев 2015, 15:03

Для решения своей задачи как-раз делал костыль с определением IP-адреса клиента. Единственное отличие - передавал адрес не в дин. код, а в xsl в личный кабинет. Далее краткое описание решения.

1. В файле web.xml добавляем новый фильтр, например, RemoteHostFilter.
2. Фильтр RemoteHostFilter имеет примерно следующее содержимое:
$this->bbcode_second_pass_code('', '
/**
* <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 имеет примерно следующее содержимое:
$this->bbcode_second_pass_code('', '
/**
* <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
vkulakov
Клиент
 
Сообщения: 932
Зарегистрирован: 07 мар 2012, 15:02
Откуда: Воронеж

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 24 фев 2015, 15:55

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

Re: проверка разрешения печати на данный принтер.

Сообщение vkulakov » 24 фев 2015, 16:18

Синхронно не значит в одном потоке. Мой вариант работает только если всё исполняется в одном потоке. Для описанной проблемы нужно допиливать ещё либо искать другие варианты.

Клиент: вер. 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
vkulakov
Клиент
 
Сообщения: 932
Зарегистрирован: 07 мар 2012, 15:02
Откуда: Воронеж

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 24 фев 2015, 17:06

$this->bbcode_second_pass_quote('vkulakov', '')инхронно не значит в одном потоке. Мой вариант работает только если всё исполняется в одном потоке. Для описанной проблемы нужно допиливать ещё либо искать другие варианты.

в общем случае, конечно, не значит.
но здесь обработка запросов идёт в одном потоке и многопоточности нет нигде никакой, тем более если синхронно чего-то там надо.
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51
Вернуться к началу

Re: проверка разрешения печати на данный принтер.

Сообщение vkulakov » 24 фев 2015, 19:47

Перечитал тему с начала и понял, что ничего не понял. Зачем здесь события, если в доках написано "для формирования вида чека использовать динамический код, события устарели". В общем, ждём автора топика.

Клиент: вер. 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
vkulakov
Клиент
 
Сообщения: 932
Зарегистрирован: 07 мар 2012, 15:02
Откуда: Воронеж

Re: проверка разрешения печати на данный принтер.

Сообщение dimOn » 24 фев 2015, 20:15

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


Вернуться в Плагин CashCheck

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

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

cron