簡體   English   中英

Spring安全性REST API

[英]Spring security REST API

我正在使用帶有grails和AngularJS的Spring Security REST Api。 我和郵遞員一起嘗試了url請求,它工作正常。 它使用已使用的x-auth-token返回結果。 但同樣我嘗試使用AngularJs,但它沒有進一步的OPTION請求。 這里顯示我的請求僅被處理為OPTION請求。下面是顯示我在POSTMAN中嘗試過的圖像。它給出了結果,並且可以正常使用x-auth-token。

我已經集成了spring security插件,如下所示。它正在為“api / login”工作,但進一步失敗了。

在第一張圖片中,它顯示我的請求僅被處理為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM