JAVA跨域問題,解決方案

<code>package com.example.test.demo;


import org.apache.commons.lang.StringUtils;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @Description 用於解決跨域問題
**/
public class AllowOriginFilter implements Filter {


@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO 其他處理
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;

HttpServletRequest request = (HttpServletRequest) servletRequest;
String origin = request.getHeader("Origin");
if (StringUtils.isNotBlank(origin)) {
//設置響應頭,允許跨域訪問
//帶cookie請求時,必須為全匹配,不能使用*
/**
* 表示允許 origin 發起跨域請求。
*/
response.addHeader("Access-Control-Allow-Origin", origin);
}

/**
* GET,POST,OPTIONS,PUT,DELETE 表示允許跨域請求的方法
*/
response.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");

/**
* 表示在86400秒內不需要再發送預校驗請求
*/
response.addHeader("Access-Control-Max-Age", "86400");

//支持所有自定義頭
String headers = request.getHeader("Access-Control-Request-Headers");
if (StringUtils.isNotBlank(headers)) {
//允許JSON請求,並進行預檢命令緩存
response.addHeader("Access-Control-Allow-Headers", headers);
}

response.addHeader("Access-Control-Max-Age", "3600");

//允許cookie
response.addHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(servletRequest, response);
}

@Override
public void destroy() {
// TODO 其他處理
}
}

/<code>
<code> @CrossOrigin
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String Hell( String name, String pwd){

return "請求成功";

}/<code>

引用commons-lang

<code> <dependency>
<groupid>commons-lang/<groupid>
<artifactid>commons-lang/<artifactid>
<version>2.6/<version>
/<dependency>/<code>


分享到:


相關文章: