Роль авторизации калитки: введите учетные данные внешнего пользователя из JSP - PullRequest
0 голосов
/ 29 мая 2011

Я делаю пошаговую миграцию JSP -> Wicket.Я сохранил приложение JSP и делал постраничную миграцию.Я могу пойти и вернуться со страниц калитки JSP <->. Но моя проблема заключается в JSP, мои учетные данные вошедшего в систему пользователя хранятся в Bean-компоненте (UserBean, scope: session) и в JSP на каждой странице, которую я проверяю, вошел ли пользователь в систему с этой страницы.bean.

Но как я могу получить эту информацию в калитке?так, чтобы на моей странице JSP, если пользователь вошел в систему, при загрузке страницы калитки он мог прочитать это и настроить информацию suer, чтобы моя страница входа в калитку не появлялась.

моя страница калитки использует wicket-auth-Роль и проверки с:

@AuthorizeInstantiation("ADMIN") public class HomePage extends BasePage {.....}

У меня есть свои собственные UserDetailsServcice и MyAuthenticationWebSession в калитке.

После некоторых попыток и помощи от Дона Роби, здесь я получил userID из сеанса в калитке:

        final RequestCycle requestCycle = RequestCycle.get();
        WebRequest wr=(WebRequest)requestCycle.getRequest();
        HttpServletRequest hsr= wr.getHttpServletRequest();

        AuthenticatedWebSession session = OrbitWebSession.get();
        String username = (String)hsr.getSession().getAttribute("SessionUser");

Теперь, где именно я могу установить имя пользователя, пароль и аутентификацию вызова, чтобы моя страница не перенаправлялась на страницу входа?Кто вызывает методы authenticate () и как?Я попробовал метод onBeforeRender () на моей защищенной странице, но он не работает.(

Ответы [ 2 ]

1 голос
/ 03 июня 2011

authenticate вызывается AuthenticatedWebSession во время процесса входа в систему. К сожалению для вас, большинство методов в вышеупомянутом классе помечены как final, поэтому их немного сложно настроить.

Я думаю, что вы должны уметь использовать защищенный метод signIn (логическое значение) в конструкторе вашего собственного сеанса. Там вы получите запрос, из которого вы, вероятно, сможете получить своего «SessionUser», затем извлечь вашего пользователя через UserDetailsService, вызвать signIn (true) и инициализировать правильные роли для этого пользователя. Если вызывается signIn (true), вы не должны получать перенаправление для входа в систему.

1 голос
/ 29 мая 2011

Дополнительный код, относящийся к процессу входа в систему, может помочь нам сделать более полный ответ, но в основном вы должны получить доступ к обычному сеансу контейнера сервлета и, следовательно, к этому bean-компоненту откуда-то в wicket.Вероятно, лучшее место для размещения этой логики - где-то в вашем MyAuthenticationWebSession, чтобы он знал, что пользователь вошел в систему.

Чтобы попасть на сеанс контейнера сервлета из кода калитки, вы можете использовать

httpSession =
((WebRequest)request).getHttpServletRequest().getSession();

Если в тот момент, когда вы добавляете это в свой код калитки, у вас еще нет этого объекта WebRequest (который, вероятно, является ServletWebRequest объектом), вы можете получить его из RequestCycle:

RequestCycle requestCycle = RequestCycle.get();
Request request = requestCycle.getRequest();
...