这里有新鲜出炉的 Java 设计模式,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
本篇文章主要介绍了 Cors 实现 java 后端完全跨域实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
/article/17/0724/338580.html 这篇文章很详细的介绍了 JS 的跨域,给出的解决方案是 springboot 的方式,假如不用 spring boot 或者 spring 版本低于 4.2 就需要自己实现;
参考了 spring boot 的实现方式,并有所简化,代码如下:
- package com.lvluo.web.filter.CorsFilter;
- 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.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.http.HttpHeaders;
- public class CorsFilter implements Filter {
- public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
- public static final String OPTIONS = "OPTIONS";
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest httpRequest = (HttpServletRequest) request;
- HttpServletResponse httpResponse = (HttpServletResponse) response;
- if (isCorsRequest(httpRequest)) {
- httpResponse.setHeader("Access-Control-Allow-Origin", "*");
- httpResponse.setHeader("Access-Control-Allow-Methods",
- "POST, GET, PUT, DELETE");
- httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
- // response.setIntHeader("Access-Control-Max-Age", 1728000);
- httpResponse
- .setHeader(
- "Access-Control-Allow-Headers",
- "Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Authorization");
- if (isPreFlightRequest(httpRequest)) {
- return;
- }
- }
- chain.doFilter(request, response);
- }
- public void init(FilterConfig filterConfig) {
- }
- public void destroy() {
- }
- public boolean isCorsRequest(HttpServletRequest request) {
- return (request.getHeader(HttpHeaders.ORIGIN) != null);
- }
- /**
- * Returns {@code true} if the request is a valid CORS pre-flight one.
- */
- public boolean isPreFlightRequest(HttpServletRequest request) {
- return (isCorsRequest(request) && OPTIONS.equals(request.getMethod()) && request
- .getHeader(ACCESS_CONTROL_REQUEST_METHOD) != null);
- }
- }
接着在 web.xml 配置 filter 即可
- <filter>
- <filter-name>corsFilter</filter-name>
- <filter-class>com.lvluo.web.filter.CorsFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>corsFilter</filter-name>
- <url-pattern>/api/*</url-pattern>
- </filter-mapping>
前端测试的 JS 代码,其中客户端的
- $.ajax({
- headers: {
- 'Authorization': 'Bearer iBoxSO9QdrHR0'
- },
- url: 'http://localhost:8080/service/api/ping',
- type: 'GET',
- dataType: 'json',
- success: function(result) {
- $("#result").html(result.code);
- }
- })
来源: http://www.phperz.com/article/17/0819/338579.html