【Spring】获取cookie,session,header(3)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。

博客涉及框架的重要知识点,根据序号学习即可。

目录

[本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。](#本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。)

博客涉及框架的重要知识点,根据序号学习即可。

1、获取cookie

1.1传统版本【使用HttpServletRequest】

1.2简洁版本【使用注解@CookieValue】

2、获取session

2.1传统版本【使用HttpServletRequest】

2.2简洁版本【使用注解@SessionAttribute】

2.3简洁版本【使用HttpSession】

3、获取header

3.1传统版本【使用HttpServletRequest】

3.2简洁版本【使用注解@RequestHeader】

最后:无论使用传统的HttpServletRequest获取,还是使用注解获取,大差不差,关键要懂其原理,当然更推荐使用注解的方式,因为更方便(哈哈哈哈哈哈代码少!!!)

1、获取cookie

1.1传统版本【使用HttpServletRequest】

复制代码
    @RequestMapping("/m11")
    public String m11(HttpServletRequest request, HttpServletResponse response){
        //获取所有的cookie信息
        Cookie[] cookies=request.getCookies();
        //打印cookie信息
        StringBuilder builder=new StringBuilder();
        if(cookies!=null){
            for(Cookie ck:cookies){
                builder.append(ck.getName()+":"+ck.getValue());
            }
        }

        return "Cookie信息:"+builder;
    }

运行结果:

没有获取到cookie是因为没有设置,下图展示如何自定义cookie【 在Application中手动添加cookie,其实这是不安全的,后端需要进行cookie的校验】

1.2简洁版本【使用注解@CookieValue】

复制代码
 @RequestMapping("/m12")
    public String m12(@CookieValue("zhangsan") String name){
        //简洁版获取cookie,使用注解
        return "获取到的name:"+name;
    }

注意区分这里的zhangsan 和name ,搞懂为啥不是第一个cookie,而是以zhangsan为name的cookie。因为@CookieValue

2、获取session

2.1传统版本【使用HttpServletRequest】

复制代码
    @RequestMapping("/m13")
    public String m13(HttpServletRequest request){
        //session的存储
        //获取session对象
        HttpSession session =request.getSession();//与getSession(true)一样,默认值为true
        if(session!=null){
            session.setAttribute("u","123");
        }
        return "Session存储成功";
    }


    @RequestMapping("/m14")
    public String m14(HttpServletRequest request){
        //session的读取
        //如果session不存在,不会自动创建session
        HttpSession session=request.getSession(false);
        String username=null;
        if(session!=null&&session.getAttribute("u")!=null){
            username=(String) session.getAttribute("u");
        }
        return "username:"+username;
    }

session是存放在服务器中的,不方便演示,所以我们先存储session,在读取

2.2简洁版本【使用注解@SessionAttribute】

复制代码
    @RequestMapping("/m15")
    public String m15(@SessionAttribute(value = "u",required = false)String username){
        //获取session简洁版【1】
        return "username:"+username;
    }

2.3简洁版本【使用HttpSession】

复制代码
    @RequestMapping("/m16")
    public String m16(HttpSession session){
        //获取session简洁版【2】
        //通过Spring MVC内置队象HttpSession来获取
        String username=(String)session.getAttribute("u");
        return "username:"+username;
    }

3、获取header

3.1传统版本【使用HttpServletRequest】

复制代码
    @RequestMapping("/m17")
    public String m17(HttpServletRequest request){
        //传统获取header
        String userAgent=request.getHeader("User-Agent");

        return "userAgent:"+userAgent;
    }

3.2简洁版本【使用注解@RequestHeader】

复制代码
    @RequestMapping("/m18")
    public String m18(@RequestHeader("User-Agent")String userAgent){
        //简洁版获取header
        return "userAgent:"+userAgent;
    }

最后:无论使用传统的HttpServletRequest获取,还是使用注解获取,大差不差,关键要懂其原理,当然更推荐使用注解的方式,因为更方便(哈哈哈哈哈哈代码少!!!)

相关推荐
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
JAVA面经实录9171 天前
Hibernate面试题库
数据库·oracle·hibernate
迷枫7121 天前
DM8 目录结构与常用排查入口梳理
服务器·数据库
C137的本贾尼1 天前
Spring AI Alibaba 模型全家桶:接入通义、百川、LLaMA 等第三方 LLM
人工智能·spring·llama
C+-C资深大佬1 天前
SSM 框架(Spring + SpringMVC + MyBatis)
java·spring·mybatis
Mr.Daozhi1 天前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_801 天前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体
大鹏说大话1 天前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【64】 ReactAgent 长期记忆
java·人工智能·spring
JacksonMx1 天前
@Transactional 最佳实践
java·spring boot·spring·性能优化