[英]Spring security REST API
我正在使用帶有grails和AngularJS的Spring Security REST Api。 我和郵遞員一起嘗試了url請求,它工作正常。 它使用已使用的x-auth-token返回結果。 但同樣我嘗試使用AngularJs,但它沒有進一步的OPTION請求。
在第一張圖片中,它顯示我的請求僅被處理為OPTION請求。 在第二張圖片中,顯示我在POSTMAN中嘗試過的內容。 它給出了結果,並且可以正常使用x-auth-token。 在第3張圖片中,我已經集成了spring security插件如下。 它正在為“api / login”工作,但進一步失敗了。 第4個圖像顯示了OPTION請求的詳細響應,然后它無法繼續進行。
我寫了如下grunt connect方法
connect: {
options: {
port: 9000,
// Change this to '0.0.0.0' to access the server from outside.
hostname: 'localhost',
livereload: 35729
},
proxies: [
{
context: '/crm/api',
host: 'localhost',
port: 8080
}
],
livereload: {
options: {
open: true,
base: [
'.tmp',
'<%= yeoman.app %>'
]
}
},
test: {
options: {
port: 9001,
base: [
'.tmp',
'test',
'<%= yeoman.app %>'
]
}
},
dist: {
options: {
base: '<%= yeoman.dist %>'
}
}
}
我仍然有同樣的錯誤。
這是一個跨域問題。
您的網頁位於localhost:9000
,后端是localhost:8080
。 這些在技術上是2個不同的域,因此您需要啟用跨源請求,或使用代理將請求轉發到端口8080
。
看起來你正在使用grunt,所以我建議設置代理。 我使用grunt-connect-proxy設置轉發到我的后端端口:
connect: {
options: {
port: 9000,
hostname: 'localhost',
livereload: 35729
},
proxies: [
{
context: '/crm/api',
host: 'localhost',
port: 8080
}
]
}
正如agerco所解釋的,問題是跨域問題。
有關該解決方案,請參閱本春季指南: 為RESTful Web服務啟用跨源請求 。
如上面的指南所述,您需要在應用程序上下文中添加Filter
bean。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "localhost:9000"); // Client URL
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.