2014-09-01 3 views
4

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

Например: Позволяет себе представить, что на странице есть одна кнопка «купить сейчас», которая добавляет товар в корзину и выполняет проверку (покупка сейчас), если пользователь уже прошел аутентификацию или открывает всплывающее окно для пользователя выполните аутентификацию.

Если аутентификация прошла успешно, а весна переадресовывается на страницу «купить сейчас» или остается на этой странице, всплывающее окно (с сообщением об ошибке «неправильный вход»).

Я уже искал в google для своего рода решения, но без везения.

Кто-то может указать мне в правильном направлении?

Thanks

+0

Насколько я понимаю, проблема заключается не в раскрытии всплывающего окна, тем больше известно, когда нужно открыть всплывающее окно без необходимости перезагрузки текущей страницы в случае отказа в доступе , -- это правильно? – Ralph

+0

Вы можете дать это [ответ] (http://stackoverflow.com/questions/3444864/ajax-login-with-spring-webmvc-and-spring-security). – kazbeel

ответ

4

Просто идея, не успела испытать Это. Это только клиентская сторона.

  1. Положите EventListener на ссылку/Button-Click-Event
  2. Использование Javascript и вызовите форму-действие или ссылку через XMLHttpRequest
  3. Проверьте код состояния HTTP: xhr.status
  4. если (OK) заменить текущий URL с целевой URL (via Html5 History API) и заменить весь документ xhr.responseText (What other options for replacing entire HTML document via W3C DOM)
  5. еще если (перенаправление) просто следуйте редирект
  6. else if (Unauthorized) open popup
0

Разбить задачу на компоненты.

Создайте световую коробку, которая активируется на основе вашего критерия.

Сделайте свою форму поданной через ajax.

Ваш контроллер аутентификации необходимо выполнить следующие действия:

если успешным -> перенаправлять на страницу оформления заказа , если не-возвращение успешным фрагмент советы, почему его неправильно.

Если возврат неверен, вам необходимо полностью обновить элемент формы, чтобы не было никаких атак csrf.

То, что я сделал, не могу дать вам код, поскольку он варьируется в зависимости от того, как вы настроили проект и просматриваете рендеринг.

+0

Вопрос OPs - это больше о том, как использовать аутентификацию, чтобы окно проверки подлинности отображалось в нужный момент, но не как отправить имя пользователя и пароль. – Ralph

0

Вы можете использовать ajax-вызов, когда пользователь нажимает на кнопку Buynow, чтобы проверить, аутентифицирован ли пользователь или нет.

Если пользователь аутентифицирован, отправьте или переместите форму тележки продукта в следующий вид (метод контроллера).

Если вы не авторизованы, вы можете открыть всплывающее окно для входа.

В форме для входа в систему используйте ajax для проверки пользователя, если удастся отправить форму корзины в следующий вид, иначе дать сообщение об ошибке.

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

0

Реализация поп-ящика на каком-то мероприятии должна быть выполнена вами (для этого вы можете использовать любую инфраструктуру интерфейса). В то время как аутентификация вызывает беспокойство, «project-security.xml» сделает это за вас. Вы должны настроить его только в соответствии с вашим требованием.

1

На самом деле Spring Security поддерживает перенаправление из коробки, взгляните на SavedRequestAwareAuthenticationSuccessHandler, так что единственное, что вам нужно сделать, - это защитить URL-адрес (например,у вас есть что-то вроде <intercept-url pattern = "/purchase/*" access = "isAuthenticated()" /> (или если у вас есть access = "hasRole('user')) вашей кнопки покупки (которая запрашивает "/purchase/"productIdHere" или /purchase?productId=someProductId), которая затем перенаправляет пользователя на страницу входа в систему и после успешного входа в систему он должен вернуться к своей исходной странице. И в вашем контроллере вы можете обработать запрос как:

@Controller 
... 

@RequestMapping(value = "/purchase..., method = ....) 
public ModelAndView purchase(@PathVariable("productId") String/Long productId (or @RequestParam etc...) 
Product someProduct = someService.getByProductId(productId); 
ModelAndView mav = new ModelAndView("view.name"); 
mav.setObject("product",product); 
return mav; 

Вы должны соответствовать другим вещам в соответствии с вашими потребностями, просто пытается указать правильное направление, как вы просили.

Надеюсь, что это поможет.

+0

Но перенаправление не является всплывающим окном. – Ralph

0

Вы можете использовать форму входа в CSS HTML (просто искать в Интернете для нее) с помощью проверки Ajax или использовать всплывающее окно Spring Http Basic Auth. Каждая страница должна проверять подлинность пользователя или нет (показывая всплывающее окно).

Проверьте эти две статьи, показывающие, как можно реализовать оба решения:

Adding Http Basic Auth to RESTful Services in Java and Spring

Spring security Ajax login

-1

Spring безопасности работает над Spring MVC - он использует редирект. Поэтому идея заключается в том, что пользователь пытается достичь «защищенного» контента, и он не прошел аутентификацию, тогда HTTP 302 возвращается и перенаправляется на страницу входа. Если вас интересует всплывающее окно, вы нарушаете модель MVC, и ее можно реализовать, конечно, но ваша жизнь будет намного сложнее.