由于在公司, 使用的服务是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>