项目部署
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;
}
添加配置类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
二是访问生产环境也走webpack代理,配置changeOrigin: true(我只试了第一个方法,第二个我自己的想法,应该可行)
devServer: {
port: 8686,
proxy: {
// 调试时,注意此处的路径
'/api': {
target: 'http://服务器地址',
// 允许跨域
changeOrigin: true,
pathRewrite: {
'^/api': '/'
}
}
}
}
Comments ()