由於在公司, 使用的服務是wildfly , 並且後臺代碼是最傳統的java web項目,沒有什麼spring 的 熱門框架, 前端使用的就是jsp ,也沒有實現全後端分離,我個人是很難受的,很多坑,代碼不規範等問題 一堆, 不說這些了 ,都是題外話。
這裏接手了一個項目,需要用到vue和公司的老後臺項目, 這就出現了前後端分離,然後很正常的跨域了,既然前端用的是Vue寫的項目就肯定用的是axios來請求後臺了,細節就不說了,由於是和同事一起開發,我只負責前端, 但是呢!~問題來了,同事並不知道如何在後臺添加跨域訪問攔截,那我肯定是不想去碰那些老代碼, 一碰就碎的那種感覺你們懂麼? 我就百度,開始使用axios的webpack配置來嘗試解決,但是無果。最後去看了一下wildfly這個服務的配置文件,看一下沒有解決途徑,功夫不負有心人,找到了方法, 貼一下:
wildfly8版本:
1. 找到對應的 subsystem
節點
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
.....
</subsystem>
不同版本的 Wildfly 此節點屬性 xmlns="urn:jboss:domain:undertow:1.2"
的版本號可能有所不同。
2. 找到 subsystem
的子節點 host
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-post-size="2048576000"/>
<host name="default-host" alias="localhost">
...
</host>
</server>
</subsystem>
3. 在 host
節點下添加 filter-ref
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-post-size="2048576000"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="allow-origin-header"/>
<filter-ref name="allow-headers-header"/>
</host>
</server>
</subsystem>
<filter-ref name="allow-origin-header"/><!-- 跨域 -->
<filter-ref name="allow-headers-header"/><!-- 跨域 -->
4. 在 filters
節點中添加對應的節點
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-post-size="2048576000"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="allow-origin-header"/>
<filter-ref name="allow-headers-header"/>
</host>
</server>
<servlet-container name="default" default-encoding="UTF-8" default-session-timeout="600">
<jsp-config development="true" check-interval="3"/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/"/>
</handlers>
<filters>
<response-header name="allow-origin-header" header-name="Access-Control-Allow-Origin" header-value="*"/>
<response-header name="allow-headers-header" header-name="Access-Control-Allow-Headers" header-value="*"/>
</filters>
</subsystem>
<filters>
<response-header name="allow-origin-header" header-name="Access-Control-Allow-Origin" header-value="*"/><!-- 跨域 -->
<response-header name="allow-headers-header" header-name="Access-Control-Allow-Headers" header-value="*"/><!-- 跨域 -->
</filters>
filters
子節點中的 name
屬性必須與 host
字節點中的 name
屬性值一一對應。
這裏還有一點需要注意的是, 有可能配置文件中沒有 <filters></filters>這個節點。自己加一個在該<subsystem>節點裏就是了。
5. subsystem
節點詳細配置
<subsystem xmlns="urn:jboss:domain:undertow:8.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
<buffer-cache name="default" />
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" />
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" />
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content" />
<http-invoker security-realm="ApplicationRealm" />
<access-log pattern="combined" directory="${jboss.home.dir}/standalone/log" prefix="access." />
<filter-ref name="x-powered-by-header" />
<filter-ref name="allow-origin-header" />
<!-- 跨域 -->
<filter-ref name="allow-headers-header" />
<!-- 跨域 -->
<filter-ref name="server-header" />
<filter-ref name="not-found" />
<filter-ref name="static" />
</host>
</server>
<servlet-container name="default" default-encoding="UTF-8">
<jsp-config development="true" x-powered-by="false" />
<websockets />
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content" />
</handlers>
<filters>
<response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="zixizixi.com" />
<response-header name="allow-origin-header" header-name="Access-Control-Allow-Origin" header-value="*" />
<!-- 跨域 -->
<response-header name="allow-headers-header" header-name="Access-Control-Allow-Headers" header-value="*" />
<!-- 跨域 -->
<response-header name="server-header" header-name="Server" header-value="zixizixi.com" />
<error-page name="not-found" code="404" path="${jboss.home.dir}\welcome-content\404.html" />
<gzip name="static" />
</filters>
</subsystem>