SSM项目跨域访问处理(含白名单处理)
最近使用ssm开发了一个项目,为了项目的开发速度,采用的是前后端同时开发,所以前端文件没有集成在项目中,最后在调试时涉及到了跨域。跨域的解决方法很多,我采用的是最简单的一种,代码如下:
step 1 新建一个过滤器filter
package com.xxxx.xxxxx;import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class SimpleCORSFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with");chain.doFilter(req, res);}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}
step 2 然后在xml中配置
<filter> <filter-name>cors</filter-name> <filter-class>com.ssm.web.filter.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping> <filter-name>cors</filter-name> <url-pattern>/*</url-pattern>
</filter-mapping>
2018.08.07更新
由于项目的升级,感觉以前的filter不满足实际需求,故而进行扩展升级
package com.xxx.xxx;import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
public class CORSFilter implements Filter {// 存放跨域的白名单private String[] permitUrl;@Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;HttpServletRequest request = (HttpServletRequest) req;String myOrigin = request.getHeader("origin");boolean isValid = false;for (String ip : permitUrl) {if (myOrigin != null && myOrigin.equals(ip)) {isValid = true;break;}}response.setContentType("textml;charset=UTF-8");response.setHeader("Access-Control-Allow-Origin", isValid ? myOrigin : "null");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("P3P", "CP=\"NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC\"");response.setHeader("XDomainRequestAllowed", "1");chain.doFilter(req, res);}// 初始化方法,这里的permitUrl是在web.xml中配置的@Overridepublic void init(FilterConfig filterConfig) throws ServletException {String urls = filterConfig.getInitParameter("permitUrl");if (urls != null) {urls = urls.replaceAll("\\n", "").replaceAll("\\r", "").replaceAll("\\t", "");}if (!"".equals(urls) && urls != null) {permitUrl = urls.split(",");}if (permitUrl != null) {for (int i = 0; i < permitUrl.length; i++) {permitUrl[i] = permitUrl[i].trim();}}}// 销毁方法@Overridepublic void destroy() {}}
web.xml中配置(这里的permitUrl中的value就是你项目允许的ip地址,不允许的将访问不到)
<filter><filter-name>cors</filter-name><filter-class>com.xxx.xxx.CORSFilter</filter-class><init-param><param-name>permitUrl</param-name><param-value>http://192.168.1.51:3000,http://192.168.1.51:8020,http://www.baidu.com:8084</param-value></init-param></filter><filter-mapping><filter-name>cors</filter-name><url-pattern>/*</url-pattern></filter-mapping>
在全栈的道路上,积极向上、成熟稳重、谦虚好学、怀着炽热的心向前方的走得更远。
原文链接:https://www.cnblogs.com/DDgougou/p/8484389.html
SSM项目跨域访问处理(含白名单处理)相关推荐
- ssm项目解决AJAX跨域,ssm项目跨域访问
最近使用ssm开发了一个项目,为了项目的开发速度,采用的是前后端同时开发,所以前端文件没有集成在项目中,最后在调试时涉及到了跨域.跨域的解决方法很多,我采用的是最简单的一种,代码如下: 新建一个过滤器 ...
- 详解浏览器跨域访问的几种办法
摘要: 本文讨论web前端安全问题以及应对措施,浏览器同源策略以及对资源跨域访问的几种解决方案 本文分享自华为云社区<Web安全和浏览器跨域访问>,原文作者:kg-follower . ...
- 使用自开发的代理服务器解决 SAP UI5 FileUploader 上传文件时遇到的跨域访问错误试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...
- Web应用跨域访问解决方案
Web应用跨域访问解决方案 Web应用的跨域访问解决方案 Web跨域访问解决方案 做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与 ...
- Web应用跨域访问及单点登录解决方案汇总
做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.Ajax的跨域访问问题是现有的Aj ...
- Django 多方式实现跨域访问
一.什么是跨域 1.1 跨越介绍 跨域,是指浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制. 这里说明一下,无法跨域是浏览器对于用户安全的考虑 ...
- nginx实现跨域访问
跨域概念 简单来说:两个url只要协议.域名.端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题. 案例 例如:在开发前后端完全分离的系统中,服务端代码属于一个工程,前端代码属于另一个工程 ...
- 新蜂商城(newbee-mall-api)部分接口实验,跨域处理(同源策略,跨域访问,CORS),系统安全问题(Session,Cookie,Token,OAuth)(软件工程综合实践课程第十三周)
文章目录 一.要求 二.知识总结 跨域处理 1.同源策略 1.1 浏览器的同源策略 1.2 跨域请求实验 2 跨域访问 2.1 添加响应头来处理跨域 2.1.1 CORS 跨域资源共享 2.1.2 设 ...
- AJAX跨域访问解决方案
Case I. Web代理的方式 (on Server A) 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果.此方案可以解决 ...
最新文章
- Java Web 中的一些问题
- Java 中几种常用的 RPC 框架介绍
- 全球及中国预编程振荡器行业需求潜力分析与投资战略咨询报告2021-2027年版
- ASP.NET Core Filter与IOC的羁绊
- php 判断wap,php判断是否wap手机客户端的方法详解
- Unable to round-trip http request to upstream: EOF
- Oracle MySQL sql 列转行 union all 实现
- 【图像处理】PS曲线工具matlab实现 交互自定义灰度映射(Gray Level Transformation)附代码链接
- 技术人员如何创业(2)---合伙人的模式
- JavaScript 数字转成大写“零壹贰叁肆伍陆柒捌玖”的方法
- yolov5模型转换(pt=>onnx=>rknn)和板端验证测试
- rls lms 对比 matlab,自适应均衡器的LMS和RLS两种算法的特性与仿真分析
- 端口Banner信息的获取
- 重大利好,区块链技术能保护森林资源?
- android三星note20.6,三星Galaxy Note 20 Ultra依旧是“安卓机皇”,用过的都说好
- 国内免费(开源)CMS系统【大全】
- java订单派单规则_重点解读 | 什么是派单?派单的好处有哪些?
- Linux查看mac地址方法(转)
- 白苹果了怎么办_苹果手机数据恢复真的能行吗?
- 金山词霸只能最大化,无法恢复小型查词界面