Как избежать использования HttpSession в каждом методе контроллера Spring? - PullRequest
0 голосов
/ 18 января 2012

Когда в методе контроллера мне нужно извлечь некоторые данные из сеанса (часто это идентификатор, который я использую для пользовательских разрешений и настройки веб-страницы для каждого пользователя), я пишу такие методы:

@RequestMapping("something")
public ModelAndView doSomething(HttpSession session) throws AuthorizationException{

PerUserModelBean bean = getSessionRelatedInfo(session);

bean.checkPermissions();



...do my stuff...

}

Что скучно, потому что мне приходится повторять параметр сеанса для каждого метода, и я должен поместить этот код в начало каждого метода. Не только скучно, если я хочу изменить это, я должен пройти через все методы и изменить это. Я хотел бы, чтобы информация о сеансе была повторной и метод checkPermissions вызывался автоматически перед моим методом, а затем каким-то образом имеет переменную bean-компонента (возможно, как threadlocal?), Автоматически заполненную в соответствии с содержимым сессии. Есть ли способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Вы должны поместить этот тип «повторяющегося» кода в Servlet Filter или Spring MVC Interceptor. Таким образом, вы сможете принудительно войти в систему, если это имеет отношение к вашему приложению.

0 голосов
/ 18 января 2012

Поместите приведенный ниже метод в суперкласс, который вы можете использовать в качестве базы для общей функциональности.Я уверен, что он у вас уже есть, поэтому все дочерние классы его унаследуют.

Для выполнения его перед каждым выполнением метода: вы можете использовать Filters / Interceptors / AOP, кто-то другой сможет дать вам более точные данные.идеи об этом.

protected HttpSession getSession(){
        ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        return attr.getRequest().getSession();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...