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 开发移动端单页应用