Intento añadir seguridad a una aplicación de descanso.
Seguí este tutorial: http://www.codesandnotes.be/2014/10/31/restful-authentication-using-spring-security-on-spring-boot-and-jquery-as-a-web-client/
Configuré mi clase que extiende WebSecurityConfigurerAdapter.
http.authorizeRequests().antMatchers("/rest/**").authenticated();
http.csrf().disable();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.formLogin().successHandler(authenticationSuccessHandler);
http.formLogin().failureHandler(authenticationFailureHandler);
Tengo un login.html, index.html que carga (a través de jquery) algún otro archivo html en index.html.
Intento acceder a un servicio con curl
curl -i -X POST -d username=test -d password=test http://localhost:8080/rest/cities
Yo tengo un
HTTP/1.1 401 Unauthorized
Toda la URL con el resto está asegurada, pero yo proporciono el nombre de usuario y la contraseña deben escribir.
Cuando depuro, veo que nunca se llama a mi clase que implementa UserDetailsService que tienen el método loadUserByUsername.
Hay algo que no hace el enlace correctamente.
Respuestas
1 para la respuesta № 1Debes iniciar sesión para acceder a los recursos restringidos. Spring Security proporciona un punto de entrada predeterminado para realizar su autenticación. Eso es lo que hace esta parte de tu enlace:
jQuery(document).ready(function ($) {
$("#loginform").submit(function (event) {
event.preventDefault();
var data = "username=" + $("#username").val() + "&password=" + $("#password").val();
$.ajax({
data: data,
timeout: 1000,
type: "POST",
url: "/login"
}).done(function(data, textStatus, jqXHR) {
var preLoginInfo = JSON.parse($.cookie("dashboard.pre.login.request"));
window.location = preLoginInfo.url;
}).fail(function(jqXHR, textStatus, errorThrown) {
alert("Booh! Wrong credentials, try again!");
});
});
});
Así que necesitas ENVIAR el /iniciar sesión url con tu usuario y contraseña parámetros Así es como se hace con el rizo:
curl -i -X POST -d username=user -d password=userPass -c /opt/cookies.txt
http://localhost:8080/rest/login
Lo que esto hace es iniciar sesión con sus credenciales y almacenar la cookie dada en el cookies.txt expediente. Entonces, solo tendrá que adjuntar esa cookie en cada solicitud realizada para obtener permiso en su servidor:
curl -i --header "Accept:application/json" -X GET -b /opt/cookies.txt
http://localhost:8080/rest/cities
Ver también: