未经授权访问弹簧安全

时间:2015-10-05 18:49:49

标签: spring spring-security spring-boot spring-restcontroller spring-rest

我尝试为其他应用程序添加安全性。

我遵循了本教程: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

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

当我调试时,我看到实现UserDetailsS​​ervice的我的类从未调用过loadUserByUsername方法。

有些东西没有正确地进行链接。

1 个答案:

答案 0 :(得分:1)

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

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

因此,您需要使用用户名密码参数 POST / login 网址。这就是卷曲的方式:

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

另见: