Próbuję dodać zabezpieczenia do aplikacji spoczynkowej.
Śledziłem ten samouczek: http://www.codesandnotes.be/2014/10/31/restful-authentication-using-spring-security-on-spring-boot-and-jquery-as-a-web-client/
Skonfigurowałem moją klasę, która rozszerza WebSecurityConfigurerAdapter.
http.authorizeRequests().antMatchers("/rest/**").authenticated();
http.csrf().disable();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.formLogin().successHandler(authenticationSuccessHandler);
http.formLogin().failureHandler(authenticationFailureHandler);
Mam login.html, index.html, który ładuje (za pomocą jquery) jakiś inny plik HTML w index.html.
Próbuję uzyskać dostęp do usługi za pomocą curl
curl -i -X POST -d username=test -d password=test http://localhost:8080/rest/cities
dostałem
HTTP/1.1 401 Unauthorized
Cały adres URL z resztą jest zabezpieczony, ale podaję nazwę użytkownika i hasło.
Podczas debugowania widzę, że moja klasa, która implementuje UserDetailsService, która ma metodę loadUserByUsername, nigdy nie jest wywoływana.
Jest coś, co nie robi poprawnie linku.
Odpowiedzi:
1 dla odpowiedzi № 1Musisz być zalogowany, aby uzyskać dostęp do ograniczonych zasobów. Spring Security zapewnia domyślny punkt wejścia do przeprowadzania uwierzytelniania. To właśnie robi ta część Twojego linku:
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!");
});
});
});
Więc musisz SŁUPEK temu /Zaloguj Się url z twoim Nazwa Użytkownika i hasło parametry. Tak to się robi z curl:
curl -i -X POST -d username=user -d password=userPass -c /opt/cookies.txt
http://localhost:8080/rest/login
Oznacza to zalogowanie się przy użyciu swoich danych uwierzytelniających i zapisanie danego pliku cookie w pliku cookies.txt plik. Następnie wystarczy dołączyć ten plik cookie do każdego żądania wykonywanego w celu uzyskania pozwolenia na serwerze:
curl -i --header "Accept:application/json" -X GET -b /opt/cookies.txt
http://localhost:8080/rest/cities
Zobacz też: