Webapp 和移动应用程序使用的 Spring API

Posted

技术标签:

【中文标题】Webapp 和移动应用程序使用的 Spring API【英文标题】:Spring API consumed by Webapp and mobile app 【发布时间】:2018-02-08 01:21:46 【问题描述】:

我有一个使用 Angular 2 开发的 web 应用程序和一个使用 Springboot 开发的 Rest API。

Mme Michu ---> WebApp (Angular 2 - Known origin) ---> API (Springboot CORS)

我在 webapp 和 API 之间配置了 CORS,它工作正常。

这是我的 CORSFilter 的实现方式

@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCORSFilter implements Filter

public SimpleCORSFilter () 
    super();


@Autowired
private Environment environment;

private String[] acao;

@Override
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException 

    acao = environment.getProperty("access-control-allow-origin").split(",");

    final HttpServletResponse response = (HttpServletResponse) res;
    final HttpServletRequest request = (HttpServletRequest) req;

    String origin = request.getHeader("Origin");

    response.setHeader("Access-Control-Allow-Origin", Arrays.asList(acao).contains(origin)?origin:"" );

    // without this header jquery.ajax calls returns 401 even after successful login and SSESSIONID being succesfully stored.
    response.setHeader("Access-Control-Allow-Credentials", "true");

    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, Origin, Content-Type, Version");
    response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, Authorization, Origin, Content-Type");


    if(!request.getMethod().equals("OPTIONS")) 
        chain.doFilter(request, response);
    


@Override
public void destroy() 



@Override
public void init(FilterConfig filterConfig) throws ServletException 
    acao = environment.getProperty("access-control-allow-origin").split(",");

问题是我需要一个新的移动应用程序(使用 ionic 开发)来与 API 交互。

Mme Michu --> MobileApp (Unknown origin) ---> API (Springboot CORS)

CORS 政策会阻止来自移动应用的请求吗? 由于我不知道移动应用程序的“来源”,如何授权来自移动应用程序的请求?

欢迎任何建议......

【问题讨论】:

【参考方案1】:

origin 是向 api 发出请求的域,如果您的 webapp 的域是 example.com,则请求将以 example.com 作为源。当资源由于来源而被阻止时,是客户端安全机制阻止了响应(服务器不知道它)。你不知道 Ionic 是如何工作的,但我不认为它实现了这种机制(可能除了渐进式 Web 应用程序)。

服务器负责报告允许的来源。 Web 浏览器负责强制仅从允许的域发送请求。

【讨论】:

我不明白你的答案... CORS 过滤器是服务器端的,所以客户端(移动应用程序)如何提供授权的来源? CORS 标头是由您的服务器发送的,没错,但是当源与服务器不匹配时,阻塞的不是服务器。使用不同的来源进行测试,您将看到服务器正在发送被客户端(您的浏览器)阻止的响应。服务器负责报告允许的来源。 Web 浏览器负责强制只从允许的域发送请求。 超级!我试试看!谢谢;)

以上是关于Webapp 和移动应用程序使用的 Spring API的主要内容,如果未能解决你的问题,请参考以下文章

C#开发移动应用系列(2.使用WebView搭建WebApp应用)

Spring 梳理 - javaConfig在App和webApp中的应用

Angular JS 仿拉勾网 WebApp 开发移动端单页应用

Angular JS仿拉勾网 WebApp 开发移动端单页应用

在PhoneGap中包装移动网站(webapp)的基本过程是啥[关闭]

Spring Security RememberMe & RESTful API