SpringMVC跨域写入Cookie

35 篇文章 0 订阅
32 篇文章 0 订阅

前后端分离的项目,SpringMVC+Tomcat(SpringBoot),前端Vue+axios。

不建议后端去写入Cookie,一般都是在前端写入Cookie,如果后端使用:@CrossOrigin(origins = "http://localhost", allowCredentials = "true"),解决写入Cookie跨域问题的话,只对http://localhost这个地址生效。

下面是示例,把你不需要的删掉就可以。

前端请求代码:

withCredentials: true:进行跨域请求时使用的一个配置选项。它用于指示浏览器在发送跨域请求时是否应该携带源网站的身份凭证(例如 Cookies、HTTP 认证信息等。

axios({
  method: 'POST',
  url: requestPrefixUrl.value + "teacher/login",
  data: Teacher,
  // 进行跨域请求时使用的一个配置选项。它用于指示浏览器在发送跨域请求时是否应该携带源网站的身份凭证(例如 Cookies、HTTP 认证信息等
  withCredentials: true
}).then(res => console.log(res)).catch(error => {
  console.error(error);
});
后端代码

controller

@CrossOrigin(origins = "http://localhost", allowCredentials = "true"):一定要写,否则前端会报跨域的错误,http://localhost为前端web服务器的ip地址,写成http://localhost:80是不行的!

@CrossOrigin(origins = "http://localhost", allowCredentials = "true")
@RestController
@ResponseBody
@RequestMapping("/teacher")
public class TeacherLoginController {
    final TeacherLoginService tLoginService;

    public TeacherLoginController(TeacherLoginService teacherLoginService) {
        this.tLoginService = teacherLoginService;
    }

    @PostMapping("/login")
    public String LoginVerification(@RequestBody Teacher teacher, HttpServletRequest request, HttpServletResponse response) {
        ....
        //添加登录的密钥
        tLoginService.addLoginSecretKeyCookieToSession(teacher, request, response);
        return "OK";
    }
}
Service
@Service
public class TeacherLoginService {

    final TeacherMapper tMapper;

    @Autowired
    public TeacherLoginService(TeacherMapper tMapper) {
        this.tMapper = tMapper;
    }

    /**
     * 用于给教师验证身份添加密钥
     *
     * @param teacher 教师账号信息
     */
    public void addLoginSecretKeyCookieToSession(Teacher teacher, HttpServletRequest request, HttpServletResponse response) {
        // 创建一个名为"teacherSecretKey",值为教师账号加密后的secretKey
        Cookie cookie = new Cookie("teacherSecretKey", "John");
        cookie.setMaxAge(3 * 24 * 60 * 60); // 设置cookie的最大生存时间为3天(单位为秒)
        cookie.setSecure(false); // 设置cookie的Secure标志为false,因为没有使用HTTPS
        // 设置cookie的HttpOnly标志为true,cookie不能通过客户端脚本(如JavaScript)访问,只能通过HTTP请求访问
        cookie.setHttpOnly(true);
        cookie.setPath("/");
        // 将cookie添加到HTTP响应中
        response.addCookie(cookie);
        // 注意:网站没有通过HTTPS提供,你可能需要将SameSite设置为Lax或者Strict,或者完全不设置SameSite属性。
        // 网站通过HTTPS提供,你可以将SameSite设置为None,并将Secure设置为true。
        String headerValue = cookie.toString() + "; SameSite=Lax";
        // 将新的Set-Cookie头添加到HTTP响应中
        response.addHeader("Set-Cookie", headerValue);
    }
}
 测试后写入成功。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值