不太确定是不是跨越的问题:
问题描述:最近一个springboot项目,前端使用vue2。在没有部署服务器上,在本机上运行时,cookie值可以正常的读取。目前,把后端的项目放到服务器上,vue项目还是在本地上跑。配置好请求路径后。前端可以请求上服务器的后端,但是在登陆后,不论时前端的登录,还是后台管理员登录。在登陆后都不可以读取到cookie值。
代码 如下
login控制器
@RequestMapping("login")
@PreOperLog(message = "用户登录",operation = OperationType.LOGIN)
@OperLog(message = "用户登录",operation = OperationType.LOGIN)
public ResultVo login(@RequestParam("accountNumber") @NotEmpty @NotNull String accountNumber,
@RequestParam("userPassword") @NotEmpty @NotNull String userPassword,
HttpServletResponse response, HttpSession session) {
UserModel userModel = userService.userLogin(accountNumber, userPassword);
System.out.println("登录:" + userModel);
if (null == userModel) {
return ResultVo.fail(ErrorMsg.EMAIL_LOGIN_ERROR);
}
// 这里对账号的状态进行判断,是否封禁
// 0代表正常,1代表封号
if(userModel.getUserStatus()!=null&&userModel.getUserStatus().equals((byte) 1)){
return ResultVo.fail(ErrorMsg.ACCOUNT_Ban);
}
session.setAttribute("userNumber",accountNumber);
System.out.println("session里是否存入了值"+session.getAttribute("userNumber"));
// cookie就是一个小体积的键值对,格式:key=value;
// 这里是为shUserId设置Cookie值
Cookie cookie = new Cookie("shUserId", String.valueOf(userModel.getId()));
cookie.setMaxAge(60 * 60 * 24 * 30);
// 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
cookie.setPath("/");
cookie.setHttpOnly(false);
System.out.println("cookie"+cookie);
System.out.println("cookie"+cookie);
System.out.println("cookie"+cookie);
System.out.println("cookie"+cookie);
// 将cookie加入http响应头 效果就是,添加后网址后面会跟上URL=.............后面省略号就是cookie值
// Cookie是存储在浏览器端而Session是存储在服务器端
// cookie.setMaxAge(60*1*1) ;
response.addCookie(cookie);
// response.addCookie(cookie)一旦执行,服务器端会自动发回消息头set-cookie给浏览器,
// set-cookie是会携带cookie键值对的,uname=kitty。创建的cookie就会保存在浏览器。所以创建的cookie是会保存在浏览器上的
return ResultVo.success(userModel);
}
跨域配置
package com.second.hand.trading.server;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.http.HttpServletResponse;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 允许跨域访问
*
* 解决前端的端口号和后端的端口号不一致的问题
*/
// CorsRegistry的全称为Cross-Origin Resource Sharing Registry ,
// 直译过来就是跨域资源共享登记。是spring中解决跨域的一种方式
@Override
public void addCorsMappings(CorsRegistry registry) {
//本应用的所有方法都会去处理跨域请求
String [] allowDomain={"http://8.130.27.251:8080","http://localhost:8081","www.ytuusedbook.top","http://b6emtg.natappfree.cc"};
// String [] allowDomain={"http://8.130.27.251/:8080","http://b6emtg.natappfree.cc"};
registry.addMapping("/**") // 可限制哪个请求可以通过跨域
.allowedHeaders("*") // 可限制固定请求头可以通过跨域
.allowedMethods("*") // 可限制固定methods可以通过跨域
.allowedOrigins("*")
.allowedOrigins(allowDomain) // 可限制访问ip可以通过跨域
// .allowedOrigins("http://b6emtg.natappfree.cc")
// .allowedOrigins("http://localhost:8082")
// .allowedOrigins("http://localhost:8080")
// 这里不允许多个端口,否则前端访问不到8081端口
.allowCredentials(true) // 是否允许发送cookie
.exposedHeaders(HttpHeaders.SET_COOKIE);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LogCostInterceptor()).addPathPatterns("/**");
}
}
vue配置
const webpack = require('webpack')
module.exports = {
publicPath: './',
assetsDir: 'static',
outputDir: 'dist',
productionSourceMap: false,
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery"
})
],
devServer: {
disableHostCheck: true,
}
},
devServer: {
// allowedHosts: [
// 'host.com', // 允许访问的域名地址,即花生壳内网穿透的地址
// '.host.com' // .是二级域名的通配符
// ],
port: 8080,
// disableHostCheck: true,
},
//https://blog.csdn.net/yuanlaijike/article/details/80522621
devServer: {
proxy: {
'/api':{
//后端接口的根目录
target:'http://8.130.27.251:8080',
target:' http://b6emtg.natappfree.cc',
changeOrigin:true,
pathRewrite:{
// '/api':'http://localhost:8080'
'^/api':'/'
}
}
}
}
};
在登陆后,正常情况下是用户的信息存储在cookie里面,在进行登录后的其他操作时,验证cookie值是否不为空,不为空进行其他的操作。
如登录后,查看用户的详细信息,服务器哪里提示cookie为空。。
如图:
这应该是什么问题呢??