2014-12-01 3 views
2

Я добавляю фильтр, чтобы проверить, действителен ли сеанс.Добавление фильтра, чтобы проверить, действительно ли сеанс или нет.

Добавлено следующее, но получаю ошибку

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws java.io.IOException, ServletException { 

    if (request.getRequestedSessionId() != null 
      && !request.isRequestedSessionIdValid()) { 

Ошибка: -

The method getRequestedSessionId() is undefined for the type ServletRequest 

ответ

4

Метод getRequestedSessionIdisRequestedSessionIdValid) объявляется на HttpServletRequest interface. Вы пытаетесь вызвать метод по ссылке типа ServletRequest. Если вы знаете, что ссылочный объект действительно будет HttpServletRequest, произведите его, чтобы вызвать метод.

HttpServletRequest httpRequest = (HttpServletRequest) request; 
if (httpRequest.getRequestedSessionId() != null && !httpRequest.isRequestedSessionIdValid()) {... 
+0

Спасибо, это сработало. У вас есть вопрос. Когда он будет запущен, я уверен, что он скопирует все атрибуты ServletRequest в HttpServletRequest. Что произойдет, если в ServletRequest больше или больше атрибутов? – user1050619

+1

@ user1050619 Кастинг ничего не делает для объекта. Кастинг применяется к значениям, а значение здесь является ссылкой на объект. Объект точно такой же. Вы просто смотрите на него иначе, как на тип 'HttpServletRequest' вместо' ServletRequest'. –

Смежные вопросы