bindInterceptor против фильтра для безопасности? - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть простой случай использования, когда я хочу получить переменную сеанса в начале сеанса и разрешить доступ только к определенным страницам на основе результата. Я не совсем уверен, лучше ли это использовать bindInterceptor для перехвата любого метода @Get или @Post на любой странице или лучше использовать фильтр. Вот набросок того, что я хотел бы сделать, но я открыт для альтернатив:

At the start of a new session (@SessionScoped ?), check a session variable authentication token

If (authentication == admin) {
    serveRegex("admin/(jsp|html)/.*").with(GuiceContainer.class);   //only allow /admin subpages
    req.getRequestDispatcher("/admin").forward(req, res); //fwd all initial page requests to /admin
}
else If (authentication == user) {
    serveRegex("user/(jsp|html)/.*").with(GuiceContainer.class);  //only allow /user subpages
    req.getRequestDispatcher("/user").forward(req, res); //fwd all initial page requests to /user
}
else {
    serveRegex("signin/(jsp|html)/.*").with(GuiceContainer.class);  //only allow /signin subpages
    req.getRequestDispatcher("/signin").forward(req, res);  //fwd all initial page requests to /signin
}

Какой метод является предпочтительным подходом (наименьший код, самый быстрый и т. Д.) Для управления этой моделью безопасности? Я хотел бы увидеть пример проекта.

Спасибо за вашу помощь!

-John

1 Ответ

1 голос
/ 26 августа 2012

Обычный способ сделать это - использовать фильтр.Учитывая, что вы, кажется, разделяете пространство URI для разных необходимых разрешений, это также, вероятно, самый простой способ.Стиль bindInterceptor полезен, если вы хотите, чтобы логика аутентификации была объявлена ​​в методах / классах ("@AdminRequired" или тому подобное), но на самом деле нет веской причины для этого - разделять пространство URI проще.Просто свяжите Фильтр, который получает текущую логику пользователя / авторизации и проверяет, соответствуют ли разрешения URI, на который направляется запрос.-Передать запрос ServletRequest / Ответ на HttpServletRequest / Response.

...