Как использовать нативный сеанс Широ в веб-приложении Grails? - PullRequest
6 голосов
/ 21 ноября 2011

В настоящее время я использую объект HttpSession по умолчанию как на контроллерах, так и на страницах gsp:

В контроллерах:

...
session.mykey = anObject;  // adding an object to session
...
if (session.otherkey) {    // performing some checking

В GSP:

...
<g:if test="${session.mykey}">
...

Я бы хотел иметь функцию "запомнить меня". В Shiro он уже встроен. Однако, насколько я понял, для этого мне нужно использовать собственный режим сеанса shiro (в Config.groovy: security.shiro.session.mode = "native"). По умолчанию он сохраняет состояние сеанса, поэтому объекты остаются в сеансе до истечения срока действия файла cookie или выхода пользователя из системы.

Правильно ли мое понимание?

Тогда мне придется изменить мои контроллеры на это:

def shiroSession = SecurityUtils.subject.session
shiroSession.setAttribute("mykey",anObject)
....
if (shiroSession.getAttribute("otherkey") ){

И мои взгляды на это:

<g:if test="${SecurityUtils.subject.session.getAttribute('mykey')}">

Итак, мои вопросы:

  • Это правильно?
  • Разве я не могу просто использовать предыдущий способ для доступа к сеансу?
  • Нужно ли отключать сеанс http по умолчанию в некоторых конфигурациях?

1 Ответ

1 голос
/ 25 ноября 2011

Я отказался от постоянного хранения объектов в сеансе (до истечения срока действия cookie). Вот что я сделал:

В методе входа в систему в контроллере:

if (! session.currentProfile){
    Subject currentUser = SecurityUtils.getSubject()
if (currentUser.isRemembered()){
    boolean success = configureSession(session, currentUser.getPrincipal())
        if (success){
        ... 
        }
    }
    ....
}

Первое «если» проверяет, есть ли у сессии нужный мне объект.

Метод configureSession помещает в сеанс всю необходимую мне информацию.

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