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誰加載(通過jQuery)一些其他HTML文件在index.html。

我試着用捲曲

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

訪問服務,我收到了

HTTP/1.1 401 Unauthorized 

與其餘所有URL被固定,但我提供的用戶名和密碼應字。

當我調試時,我看到,然後我的類實現UserDetailsS​​ervice誰擁有方法loadUserByUsername永遠不會被調用。

有些人不正確地做鏈接。

回答

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/登錄網址與你的用戶名密碼參數。這就是它是如何與捲曲做到:

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

這樣做是與您的憑據登錄並存儲在cookie.txt的文件中給出的cookie。然後,你只需要附上該cookie在每一個請求進行以獲得許可,您的服務器:

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

參見:

+0

感謝工作,只需要看看有沒有辦法保護我的html文件。 –