java後端解決跨域問題(過濾器或者註解) (有效)

轉自: 月慕向陽 的 《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
--------------------- 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章