spring mvc 怎么允许跨域访问

 我来答
护肤达人IT宅族
2016-01-26 · 知道合伙人互联网行家
护肤达人IT宅族
知道合伙人互联网行家
采纳数:5637 获赞数:17441
毕业于曲阜师范大学,学士学位。互联网行业2年从业经验,读过SEO相关书籍。现任爱家网SEO优化专员。

向TA提问 私信TA
展开全部
Controller的每一个请求返回的时候都加上Access-Control-...header,需要注意的是并不是所有的浏览器都支持这些header,使用之前要先了解清楚。
实现起来也很简单那就是Interceptor,代码如下:
ublic class AccessKeyInterceptor extends HandlerInterceptorAdapter {

private static Log log=LogFactory.getLog(AccessKeyInterceptor.class);

@Autowired
private IAccessService accessService;

private String accessKeyParameterName="accessKey";
private List<String> defaultAccessAllowedFrom;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String accessKey=request.getParameter(accessKeyParameterName);
String referer = request.getHeader("Referer");
URL u = new URL(referer);
String host = u.getHost().toLowerCase();
if(accessKey==null){
log.error("====================================ILLEGAL ACCESS: ACCESS_KEY_MISSING!=======================");
}else{
log.debug("====================================ACCESS WITH Access KEY:"+accessKey+"====================");
IAccess access = accessService.getAccess(UserSessionUtils.getUserSession(request), accessKey);
if(access!=null){
defaultAccessAllowedFrom=access.getAccessAllowedFrom();
}else{
log.warn("======================================ACCESS KEY:"+accessKey+" DOES NOT EXIST!=================");
}
}
for(String s : defaultAccessAllowedFrom) {
if(host.matches(s)){
response.setHeader("Access-Control-Allow-Origin", referer);
break;
}
}
response.setHeader("Access-Control-Allow-Headers", "Content-Type");
response.setHeader("Access-Control-Allow-Methods", "GET");
response.setHeader("Allow", "GET");
return true;
}

public List<String> getDefaultAccessAllowedFrom() {
return defaultAccessAllowedFrom;
}

public void setDefaultAccessAllowedFrom(List<String> defaultAccessAllowedFrom) {
this.defaultAccessAllowedFrom = defaultAccessAllowedFrom;
}

public String getAccessKeyParameterName() {
return AccessKeyParameterName;
}

public void setAccessKeyParameterName(String accessKeyParameterName) {
this.AccessKeyParameterName = AccessKeyParameterName;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式