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>


分享到:


相關文章: