我一直在寻找一个在spring3.1上启用CORS的解决方案,几乎每个人都使用相同的代码,如下所示。
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())); {
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Authorization");
response.addHeader("Access-Control-Max-Age", "1728000");
}
filterChain.doFilter(request, response);
}
}
我从https://gist.github.com/kdonald/2232095看到了这段代码
你是否在if语句结束时看到'分号'?我有点生气,因为我在这段代码上挣扎了一个多小时......
这段代码看起来像典型的if语句,但因为“分号”使它以完全奇怪的方式运行。
我仍然不明白这段代码是如何工作的,如果它有效,为什么作者会这样编写代码......
不仅对于'分号',而且对于{},如果'分号'用于任何目的,这个括号也是无用的。
有没有人能帮我理解这段代码?
分号将结束if语句,使其成为空if语句。允许使用此语法,因为您可以编写无括号if语句。
然后,独立的大括号将声明一个匿名块,它会添加标题。该块将始终执行。所以你总是会添加标题。
这可能是作者的错字。