2015-02-18 2 views
0

У меня возникли проблемы с получением ценности, которую я вложил в сеанс. Я хочу проверить это значение с помощью перехватчика, но я получаю только нуль.атрибут сеанса null в моем перехватчике весны

Это где я ставлю переменную "trustedUser"

@RequestMapping(value = "/context/{token}", method = { RequestMethod.GET }) 
public @ResponseBody 
ResponseEntity<ContexteUI> getContextByToken(@PathVariable("token") String token, HttpSession session) 
     throws ContextFault_Exception { 

    HttpStatus httpStatus = HttpStatus.OK; 
    if (validation(token)){ 
     session.setAttribute("trustedUser","trustedUser"); 
    } else { 
     httpStatus = HttpStatus.BAD_REQUEST; 
    } 

    return new ResponseEntity<ContexteUI>(contexte, httpStatus); 
} 

Это мой перехватчик:

public class AuthentificationInterceptor extends HandlerInterceptorAdapter { 
    @Override 
    public boolean preHandle(HttpServletRequest request, 
     HttpServletResponse response, Object handler) throws Exception { 

     System.out.println("Pre-handle"); 

     String trustedUserTest = (String) request.getSession().getAttribute("trustedUser"); 
     System.out.println("trustedUserTest: "+ trustedUserTest); // I only get null here, why ? 

     return true; 

    } 
} 

Где я неправ?

+1

Пробовали ли вы его getContextByToken (String @PathVariable ("маркер") маркер, HttpServletRequest запрос) {HttpSession сессии = request.getSession(); session.setAttribute ("trustedUser", trustedUser); – erhun

ответ

1

К сожалению проблема была из-за другой причины: я deplued Страница jsp с ворчанием на порт 8000 , а мой API (услуги) был отображен на порту 8080.

Очевидно, браузер не смог установить связь между ними.

Так что я переехал все на 8080 порту, и он теперь работает

1

A HandlerInterceptor вызывается перед тем, как соответствующий HandlerAdapter запускает выполнение самого обработчика. Те, кто сказал, вы пытаетесь получить доступ к атрибуту из сеанса в фазе preHandle(), который вызывается перед выполнением обработчиком itslef, и вы еще не установили атрибут в сеанс.

Так что вы можете переместить свою логику на фазу postHandle() и получить там атрибут сеанса или изменить свою логику, если вам действительно нужно что-то делать в фазе preHandle.

И postHandle() вызывается после выполнения обработчика (именно поэтому, он позволяет манипулировать объектами ModelAndView перед визуализацией его на странице просмотра)

+0

Спасибо за усилия, но проблема была elsewehre (нетривиальная) – stackSaru

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