Подтвердить что ты не робот

Spring Безопасность 3.1.3 запрос запроса

Я защищаю свое приложение с помощью Spring Security 3.1.3, и у меня есть требование разрешить пользователям входить в систему по ссылке в стороннем приложении.

Однако ссылка в стороннем приложении будет перенаправляться на определенный ресурс, а не на страницу входа, где ресурс, который хочет пользователь для доступа будет определяться как параметр querystring. Так, например, ссылка будет иметь вид //server.com/app/build/panel.jsp? Resourceid = 'blah'`

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

Теперь все это прекрасно работает, кроме запроса, который разделяется на Spring Security, прежде чем он войдет в поток обработки запроса. Это показано в отладочном отчете Spring Безопасность;

org.springframework.security.web.savedrequest.HttpSessionRequestCache: DefaultSavedRequest добавлен в сеанс: DefaultSavedRequest [http://server.com:8080/app/build/panel.jsp]

т.е. запрос не сохраняется и? resourceid = 'blah' удален.

Обратите внимание: в настоящее время я использую Ant соответствие. Мне не нужно на самом деле сопоставлять запрос.

В более ранних версиях Spring Security, казалось, вы можете повлиять на это поведение, используя BeanPostProcessor в соответствии с этим сообщением, Spring Безопасность - URL-адрес с игнорированными правилами параметров запроса. Но метод DefaultFilterInvocationSecurityMetadataSource.setStripQueryStringFromUrls() был удален из Spring Security 3.1.3.

Как настроить Spring "Безопасность", чтобы не вырезать строку запроса из исходного запроса? Таким образом, когда пользователь перенаправляется после входа в систему в исходном URL-адресе будет сохранен параметр querystring?

Много спасибо Ховард

4b9b3361

Ответ 1

Является в основном обработчиком успеха.

Вы можете взглянуть на этот пример:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
      .authorizeRequests()
      .antMatchers("/login*")
      .permitAll()
      .anyRequest()
      .authenticated()
      .and()
      .formLogin()
      .successHandler(new RefererAuthenticationSuccessHandler());
}

Подробнее об этом: http://www.baeldung.com/spring-security-redirect-login