2013-05-11 6 views
3

Я работаю над прилично большим приложением Spring MVC, которое продолжает расти. Это традиционное приложение Spring MVC с представлениями JSP, который отображает HTML-код, который возвращается в браузер. Приложение использует множество javascript и jQuery плагинов. Javascript разбросан по всему коду и становится все труднее поддерживать. Мы хотели бы очистить это и перейти на одностраничное приложение. Мы рассмотрели Backbone.js и, в частности, Marionette. Несколько вопросов у нас есть:Добавление Backbone.js в существующее приложение Spring MVC

  1. Как работает Spring Security? Насколько я понимаю, вместо JSP и HTML, возвращаемых с сервера, он будет JSON через RESTful API. Поэтому, когда пользователь регистрируется с именем пользователя/паролем, мне нужно создать ключ API и отправить его в успешный ответ аутентификации? Затем с этого момента каждый вызов API будет иметь эту ключевую часть API для аутентификации каждого вызова?

  2. У других есть успех, перемещающий традиционное приложение Spring MVC с представлением JSP в архитектуру просмотра Javascript MVC с API RESTful? Стоит ли это и какие-то предложения?

ответ

3

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

Скорее всего, ваши существующие маршруты mvc хорошо подходят вашему домену. Вместо того, чтобы пытаться внедрить новый api, вы можете адаптировать существующие весенние контроллеры для возврата json. Спрингс, существующее управление auth/session, будет доступно с этим подходом, что сэкономит ваше время и силы.

Одно замечание. Вам нужно будет обработать 401 & 403 кодов состояния, возвращенных из ваших методов выборки магистрали. В зависимости от вашего приложения может быть полезно настроить глобальный обработчик для этого.

Глобальное перенаправления для 401/403

App.on("initialize:after", function() { 
    $(document).ajaxError(function (event, xhr) { 
     if(xhr.status === 401) { 
      window.location.href('/#sign-in'); 
     }else if(xhr.status === 403) { 
      window.location.href('/#restricted'); 
     } 
    }); 

    Backbone.history.start(); 
});