forum.bitel.ru
http://forum.bitel.ru/

Сброс сессий при удачной аутентификации
http://forum.bitel.ru/viewtopic.php?f=19&t=7261
Страница 1 из 1

Автор:  beetle [ 02 окт 2012, 00:41 ]
Заголовок сообщения:  Сброс сессий при удачной аутентификации

Ситуация. Имеется несколько NASов для доступа в сеть пользователей. Если висит ограничение в одну сессию на логин, то пользователь не завершивший сессию на одном и пытаясь залогиниться на другом получает отказ. Стандартно сделан сброс сессий если пришел верный запрос на авторизацию с того-же Calling-Station-Id (опция check.duplicate.session=1 в настройках NASa). Но пользователи часто (всегда практически) оставляют одну сессию на ноуте, а с планшетом пытаются зайти повторно и уже не с дома. При такой ситуации Calling-Station-Id отличаются. Как можно скриптом реализовать сброс всех существующих сессий, если он пытается залогиниться с другого устройства (конечно при условии, что аутентификация прошла успешно). Спасибо.

Автор:  Phricker [ 02 окт 2012, 01:06 ]
Заголовок сообщения:  Re: Сброс сессий при удачной аутентификации

И тут вдруг оказывается что дома роутер, а он пытается подключиться с планшета... Кто-кого и надолго ли хватит :lol:

Автор:  Phricker [ 02 окт 2012, 01:07 ]
Заголовок сообщения:  Re: Сброс сессий при удачной аутентификации

http://wiki.bgbilling.ru/index.php/Доп._действие_сброса_активных_соединений
Для 5.1 правда. Но можно переписать для 5.2 и повесить на радиус авторизацию. Но я бы не стал этого делать.
Лучше все таки если хочет сбросить - зашел в ЛК и сбросил

Автор:  beetle [ 02 окт 2012, 03:06 ]
Заголовок сообщения:  Re: Сброс сессий при удачной аутентификации

Да, лучше чтоб сбрасывали с личного кабинета, но в итоге на сотку пользователей звонят в сапорт 90. Исследования показали, что минироуторев все меньше, а вот мобольных устройств стремится по 2 штуки на персону. В общем я тоже за личный кабинет, но при массовом внедрении и унификации доступа через кабельную сеть дома и wifi по городу получается геморно. Ссылку с вики видел, но не знаком с java и тем более api bgbs. Если подправить пару строк, то помогите. Если требует серьезной доработки то дайте знать, буду разбираться.

Автор:  beetle [ 06 дек 2012, 00:46 ]
Заголовок сообщения:  Re: Сброс сессий при удачной аутентификации

Вот функция, если кому нужно, устанавливается также как и тут. Один минус, при превышении лимита пользователь получит ошибку авторизации т.е. войдет со второй попытки.

Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.dialup.bean.busevent.*;
import bitel.billing.common.*;
import bitel.billing.server.util.*;
import ru.bitel.bgbilling.server.util.*;
import ru.bitel.bgbilling.kernel.event.*;
import java.sql.*;
import java.util.*;

int MID = 1; // код модуля

public void onEvent( event, setup, con, conSlave )
{
 contractId = event.getContractID();

 errCode = event.getErrorCode();

 if( errCode == 21 ) // если ошибка превышения лимита сессий
  {
 
      int count = 0;
 
      String tableName = ServerUtils.getModuleMonthTableName( "log_session", new java.util.Date(), MID );
      if( ServerUtils.tableExists( con, tableName ) )
      {
         String query =
            "SELECT session.id FROM " + tableName + " AS session " +
            "INNER JOIN user_login_" + MID + " AS login ON session.lid=login.id AND login.cid=? " + "WHERE session.status=0";
         PreparedStatement ps = con.prepareStatement( query );
         ps.setInt( 1, contractId );
         ResultSet rs = ps.executeQuery();
         while( rs.next() )
         {
            int recordId = rs.getInt( 1 );
             count++;
               EventProcessor.getInstance().publish( new DialupSessionBreakEvent( MID, recordId ) );   // непосредственно киляет сессии
         }
      }
    
  }
}

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/