叼根棒棒糖闯天下! 2023-04-05 19:30 采纳率: 71.4%
浏览 75
已结题

项目上云,遇到的一些问题

不太确定是不是跨越的问题:

问题描述:最近一个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为空。。
如图:

img

这应该是什么问题呢??

  • 写回答

7条回答 默认 最新

  • pzzhao 2023-04-05 21:45
    关注
    获得7.50元问题酬金

    你把你的前端代码也放在服务器上,同一个域名下么,应该就ok了。

    评论

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 赞助了问题酬金15元 4月5日
  • 创建了问题 4月5日

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)