1。允许整个项目跨域访问,可通过filter来进行过虑,在文件夹下创建一个名叫: web过滤器的java类:
文件位置及文件名:\src\main\java\pm.lms\WebConfig\SimpleCORSFilter.java 注意这两个文件可以放在src\main\java下的任意一个子文件夹中,可以自己定义,使用注解方式的话,系统会自己查找带有@Configuration的文件在配置文件web.xml中进行注册。无需手工操作web.xml文件,但是如果你的项目不是springBoot框架的话,你就要采用原来的方式在web.xml中进行手工注册。
public class SimpleCORSFilter implements Filter{ @Override public void destroy() { } @Override public 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); } @Override public void init(FilterConfig arg0) throws ServletException { } }
在web.xml中需要添加如下配置
1)第一种方法:手工设置web.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>
</filter>
2)第二种方法:springBoot注解的方法,采用java类的方式直接操作web.xml文件,注意:springBoot不采用手工配置web.xml
文件位置及文件名:\src\main\java\pm.lms\WebConfig\WebConfig.java
package pm.lms.WebConfig;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class WebConfig {@Beanpublic FilterRegistrationBean<SimpleCORSFilter> filterRegistrationBean() {FilterRegistrationBean<SimpleCORSFilter> filterRegistrationBean = new FilterRegistrationBean<>();filterRegistrationBean.setFilter(new SimpleCORSFilter());filterRegistrationBean.addUrlPatterns("/*");return filterRegistrationBean;}
}
2。为单个方法提供跨域访问,直接添加请求头:
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”);
后端(springboot)解决跨域问题
首先我门要知道什么是跨域:
跨域是指 不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
也就是如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容
如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。
什么是同一个域?
同一协议,同一ip,同一端口,三同中有一不同就产生了跨域。
前端解决跨域:
前边也说了,跨域是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
解决:
所以搞一个node 服务器做代理,发出请求到node 服务器,node服务器转发到后端就可以绕过跨域问题。
后端解决跨域问题:
后端解决就比较简单了。例如我用的springboot,只用在Controller类上添加一个“@CrossOrigin“注解就可以实现对当前controller 的跨域 访问了,当然这个标签也可以加到方法上。
@RequestMapping(value = "/users")
@RestController
@CrossOrigin
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(method = RequestMethod.POST)@CrossOriginpublic User create(@RequestBody @Validated User user) {return userService.create(user);}
}
学习收藏
转载自:https://blog.csdn.net/weixin_41796956/article/details/84133901?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-84133901-blog-128429843.235%5Ev38%5Epc_relevant_sort&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-84133901-blog-128429843.235%5Ev38%5Epc_relevant_sort&utm_relevant_index=2