轉自: 月慕向陽 的 《java後端解決跨域問題(過濾器或者註解)》
原址:https://blog.csdn.net/weixin_41796956/article/details/84133901
1。允許整個項目跨域訪問,可通過filter來進行過慮:
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中需要添加如下配置
<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。爲單個方法提供跨域訪問,直接添加請求頭:
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 {
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.POST)
@CrossOrigin
public User create(@RequestBody @Validated User user) {
return userService.create(user);
}
}
相關知識:
CSRF是什麼?
CSRF(Cross-site request forgery),中文名稱:跨站請求僞造,也被稱爲:one click attack/session riding,縮寫爲:CSRF/XSRF。
參考 :https://www.zhihu.com/question/26379635
---------------------