0

我尝试为休息应用程序增加安全性。

我遵循了本教程: http: //www.codesandnotes.be/2014/10/31/restful-authentication-using-spring-security-on-spring-boot-and-jquery-as-a-web-client/

我配置了扩展 WebSecurityConfigurerAdapter 的类。

http.authorizeRequests().antMatchers("/rest/**").authenticated();
http.csrf().disable();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.formLogin().successHandler(authenticationSuccessHandler);
http.formLogin().failureHandler(authenticationFailureHandler);

我有一个login.html、index.html,它们在index.html 中加载(通过jquery)其他一些html 文件。

我尝试使用 curl 访问服务

curl -i -X POST -d username=test -d password=test http://localhost:8080/rest/cities

我得到一个

HTTP/1.1 401 Unauthorized

所有带休息的网址都是安全的,但我提供的用户名和密码应该是单词。

当我调试时,我看到我的类实现了具有方法 loadUserByUsername 的 UserDetailsS​​ervice 永远不会被调用。

有些人没有正确地做链接。

4

1 回答 1

1

您需要登录才能访问受限资源。Spring security 为执行身份验证提供了默认入口点。这就是您给定链接的这一部分的作用:

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!');
        });
    });
});

因此,您需要使用您的用户名密码参数发布/login url。这就是使用 curl 的方式:

curl -i -X POST -d username=user -d password=userPass -c /opt/cookies.txt 
http://localhost:8080/rest/login

这样做是使用您的凭据登录并将给定的 cookie 存储在cookies.txt文件中。然后,您只需在执行的每个请求中附加该 cookie 即可在您的服务器中获得权限:

curl -i --header "Accept:application/json" -X GET -b /opt/cookies.txt 
http://localhost:8080/rest/cities

也可以看看:

于 2015-10-05T19:53:50.683 回答