2017-02-20 26 views
0

У меня есть Угловое + весеннее приложение REST и Wicket. Wicket обслуживает класс UserPage. Этот UserPage содержит мою страницу javascript.Калитка игнорирует перенаправление 302 с весны

public class UserPage extends WebPage { 

public UserPage() { 
    super(); 
} 

@Override 
public void renderHead(IHeaderResponse response) { 
    super.renderHead(response); 
    response.render(JavaScriptHeaderItem.forUrl("https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js")); 
    response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(UserPage.class, "user.js"))); 
    response.render(CssHeaderItem.forReference(new CssResourceReference(UserPage.class, "user.css"))); 
} 

я реализовал фильтр, чтобы проверить, если сессия активна, если это не так, страница должна перенаправлять.

WicketSession s = WicketSession.get(); 

if (s == null) { 
    response.sendRedirect("/"); 
} else if (s.getUser() == null) { 
    response.sendRedirect("/"); 
} else { 
    filterChain.doFilter(request, response); 
} 

Однако, когда я запускаю эту страницу без входа в систему, браузер получает 302, но не перенаправляет. Это происходит только тогда, когда страница подается через калитку. Если я вручную перейду в UserPage.html, он будет перенаправлен.

Кто-нибудь знает, почему это происходит? Это, безусловно, калитка, и я не так хорошо знаком с калитки.

При попытке достичь/пользователя, страница остается, и HTML тело отправить как данные ответа, которые мой скрипт пытается разобрать и терпит неудачу (следовательно, все пустые флажки)

Когда вручную собирается UserPage.html, он перенаправляет. enter image description here

Кто-нибудь знает, почему калитка не перенаправляется, когда ее отправляют 302? Любые подсказки о возможном исправлении?

+0

Как вы определили свой фильтрChain? Если фильтр wicketFilter находится за вашим собственным фильтром, Wicket не должен вмешиваться. –

+0

Ах да фильтр калитки был фактически выполнен до пружинного фильтра. Теперь они перенаправлены, но это вызвало еще одну проблему. , когда я вызываю get() на WicketSession внутри фильтра пружины, он выдает org.apache.wicket.WicketRuntimeException: к текущему потоку приложения не прилагается. – user3761498

+0

Вот что на самом деле заставил меня спросить об этом. Обычно вам нужно добавить WicketSessionFilter в свою цепочку, чтобы объекты Wicket (например, сеанс) были доступны для кода без калит. Тем не менее рекомендуется поместить фильтр калитки перед ним (если эта страница иногда может быть доставлена ​​Wicket) ... Может быть, вы хотите посмотреть в Wicket Authentication и перенаправить на определенную страницу, когда ни один пользователь не войдет в сеанс? –

ответ

1

1) Если вы сохраняете данные сеанса в WicketSession, то это должно быть перед фильтром/сервлетом Spring в web.xml.

Я бы посоветовал сохранить пользователя в Spring Security Authentication, если вы его используете.

2) WicketSession.get() никогда не возвращается null. Он действует как «получить или создать». Вместо этого вам нужно if (WicketSession.exists()) {...}.

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

  • Нет связанных вопросов^_^