Spring Security 3 RestTemplate POST для j_spring_security_check - PullRequest
0 голосов
/ 27 сентября 2011

Я использую Spring Security 3 с конечными точками REST. Мне удалось получить базовую работу Spring Security.

Часть security-context.xml

<security:http auto-config="true" use-expressions="true" access-denied-page="/rest/denied" >
<security:intercept-url pattern="/rest/*" access="ROLE_USER"/>

и базовая конфигурация, найденная в Интернете

<security:authentication-manager> 
      <security:authentication-provider user-service-ref="userDetailsService">
           <security:password-encoder ref="passwordEncoder"/>
     </security:authentication-provider>

<!-- Use a Md5 encoder since the user's passwords are stored as Md5 in the database -->
<bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"   id="passwordEncoder"/>

<!-- An in-memory list of users. No need to access an external database layer.
See Spring Security 3.1 Reference 5.2.1 In-Memory Authentication -->
  <!-- john's password is admin, while jane;s password is user  -->
  <security:user-service id="userDetailsService">
     <security:user name="john" password="21232f297a57a5a743894a0e4a801fc3"     authorities="ROLE_USER, ROLE_ADMIN" />
  <security:user name="jane" password="ee11cbb19052e40b07aac0ca060c23ee" authorities="ROLE_USER" />
</security:user-service>

Я хочу войти в j_spring_security_check, используя RestTemplate POST.

HttpEntity<String> entity = new HttpEntity<String>(request, headers);
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("j_username", "john");
            map.put("j_password","21232f297a57a5a743894a0e4a801fc3");

            String response = restTemplate.postForObject("http://localhost:8080/rest/j_spring_security_check",  map, String.class);

но в журнале, похоже, параметр имени пользователя не читается

DEBUG o.s.s.authentication.ProviderManager - Authentication attempt using org.springframework.security.authentication.dao.DaoAuthenticationProvider
DEBUG o.s.s.a.d.DaoAuthenticationProvider - User '' not found
DEBUG o.s.s.w.a.UsernamePasswordAuthenticationFilter - Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials

Как правильно получить шаблон REST для публикации аутентификационных данных? Есть ли лучший способ войти в систему / получить авторизацию, кроме j_spring_security_check? Информация идет в шапку?

Заранее спасибо.

1 Ответ

1 голос
/ 27 сентября 2011

Это похоже на дубликат другого вопроса SO .Вы, вероятно, подходите к этому неправильно, хотя.Обычно, если вы отправляете запрос REST, вы не проходите аутентификацию в одно и то же время - это не имеет никакого смысла - конечно, не используя логику стиля POST.

Для аутентификации запросов REST вам следует использоватьдругая форма аутентификации (при условии, что эти запросы генерируются программно): * Базовая аутентификация HTTP * Сертификаты X.509

ИЛИ, если это происходит через источник XHR / Javascript, вы должны быть готовы к сбою запроса иперенаправить пользователя на механизм входа в систему.Обычно обработка запросов в стиле REST в Spring Security - это совсем не то же самое, что обработка обычных защищенных страниц.Вы должны быть готовы к некоторой сложности.

Удачи!

...