项目部署

aginx到tomcat,能访问到index.html, 但是找不到css、js等文件

给静态文件所在目录一个指引

    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
    {
        root /www/webs/unwi/ulog/WEB-INF/classes/static;
        expires      12h;
    }

nginx配置expires后静态文件404

添加配置类WebsocketConfig,调试时不报错,打包时报错,Error creating bean with name 'serverEndpointExporter' 问题

先说解决办法:

在SpringBootTest后加上(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 即可
原因:websocket是需要依赖tomcat等容器的启动。所以在测试过程中我们要真正的启动一个tomcat作为容器。
https://blog.csdn.net/qq_27101653/article/details/85072241

描述:

package net.unwi.ulog.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
@EnableWebSocket
public class WebsocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter () {
        return new ServerEndpointExporter();
    }
}

测试时只有这三条提示

> Task :test

net.unwi.ulog.UlogApplicationTests > contextLoads() FAILED
   java.lang.IllegalStateException
       Caused by: org.springframework.beans.factory.BeanCreationException
       Caused by: org.springframework.beans.factory.BeanCreationException

           Caused by: java.lang.IllegalStateException
           Caused by: java.lang.IllegalStateException


2 tests completed, 1 failed

> Task :test FAILED

Execution failed for task ':test'.
> There were failing tests. See the report at: file:///C:/Users/era/workspace/ulog/ulogbe/ulog/build/reports/tests/test/index.html

去测试类运行test


2020-03-27 19:45:47,705 -Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExporter' defined in class path resource [net/unwi/ulog/config/WebsocketConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	...
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
	at org.springframework.util.Assert.state(Assert.java:73)
	at org.springframework.web.socket.server.standard.ServerEndpointExporter.afterPropertiesSet(ServerEndpointExporter.java:107)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)
	... 103 common frames omitted
2020-03-27 19:45:47,718 -Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@62fc5b0f] to prepare test instance [net.unwi.ulog.UlogApplicationTests@741177b3]
java.lang.IllegalStateException: Failed to load ApplicationContext
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123)
	...
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.base/java.lang.Thread.run(Thread.java:834)

Provisional headers are shown

因为服务器带宽太小,所以我想把前端放在coding提供的pages服务上,后台spring security配置允许cors,但是前端能登录成功,但是再访问资源又显示未登录,打开浏览器控制台发现请求头那里有这么一句提示

Provisional headers are shown

找不到sessionid,有博文说

总之请求时没发出去,被浏览器拦截了
https://www.jianshu.com/p/4cfa40121ecf

也就是虽然服务端允许跨域访问,但是浏览器不知道,那么就需要告诉浏览器请允许我跨域访问。两个办法

一是给axios配置 withCredentials: true

https://stackoverflow.com/questions/41778860/vue-and-axios-cors-error-no-access-control-allow-origin-header-is-present-on-t

二是访问生产环境也走webpack代理,配置changeOrigin: true(我只试了第一个方法,第二个我自己的想法,应该可行)

https://cli.vuejs.org/config/#devserver-proxy

devServer: {
      port: 8686,
      proxy: {
        // 调试时,注意此处的路径
        '/api': {
          target: 'http://服务器地址',
          // 允许跨域
          changeOrigin: true,
          pathRewrite: {
            '^/api': '/'
          }
        }
      }
    }