广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot普通类中如何获取session问题
  • 755
分享到

springboot普通类中如何获取session问题

springboot普通类springboot普通类获取sessionspringboot session 2023-01-12 12:01:49 755人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录spring中普通类获取session项目中日志功能解决方案SpringBoot中使用session基础知识在 Spring Boot中使用总结Spring中普通类获取sessi

Spring中普通类获取session

项目中日志功能

记录所有通过后台操作的记录,记录项有

时间、操作员、功能模块、操作内容

写了一个基于注解方式的aop,实现日志功能

使用shiro的话可以直接获取到用户的token,然后获取到用户登录信息

可是项目中没有使用token,使用的是session绑定登录信息,需要在@Aspect中获取到用户信息

解决方案

public class ServletUtil {

    public static ServletRequestAttributes getRequestAttributes() {

        return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    }

    public static httpservletRequest getRequest() {
        return getRequestAttributes().getRequest();
    }
}

SpringBoot中使用session

基础知识

Cookie

  • Cookie由服务器端创建,然后添加到 HttpServletResponse 中发送给客户端(浏览器)。
  • 可以添加多个cookie键值对。
  • Cookie 由键值名和键值组成。相同 domain 和 path 中的键值名不能重复,添加键值名重名的键值对会覆盖上一个同名的键值对。
  • 添加 Cookie 时,需要指定cookie所在域(setDomain), 路径(setPath),指定存在时长(setMaxAge)。
  • 服务端创建好cookie后提交给客户端,之后浏览器的每次请求(HttpServletRequest)里都会携带cookie数组
  • springMVC有两种方式获取:(1)在控制器函数中通过对参数注解@CookieValue(键值名),获取指定某个cookie。(2)通过 HttpServletRequest 中的 getcookies 方法获取 cookie 数组,然后迭代里面的每一个 cookie 键值对。

Session

  • 服务器会根据客户端的请求 HttpServletRequest 创建 session=request.getSession()。
  • 每一个 session 都有一个唯一的标示 sessionID ,可通过 request.getSession().getId()获得。
  • session是存储在服务器端的,每一个 session 都有一个id,当创建一个 session 后,会将该 sessionID 存放到此次访问的 cookie 中,当下次客户端的访问到来需要提取服务器中的 session时,会根据访问中 cookie 里的 sessionID 值来找到服务器中的具体 session。
  • 访问静态资源时不会创建 session
  • 服务器会把长时间没有活动的 session 从服务器内存中清除,此时 session 便失效。Tomcat 中 session的默认失效时间为 20分钟
  • Tomcat 7以上的版本中默认禁止客户端脚本读取session Id,需要在context.xml中设置useHttpOnly=”false”,开启权限。

在 Spring Boot中使用

设置useHttpOnly

jar 项目

在配置文件中设置:

server.servlet.session.cookie.http-only=false

war项目

在context.xml文件中的Context添加属性useHttpOnly

<Context useHttpOnly="false"><Context>

设置Cookie

场景:首次请求时跳转到指定页面,页面再通过ajax向后台请求数据,进行页面渲染。跳转页面时,需要指定cookie,否则会出现项目部署到外部tomcat时,cookie无法写入的情况,造成ajax请求时,两次的sessionId不一致。

@RequestMapping(value="/query", method=RequestMethod.GET)
public ModeAndView queryInfo(@RequestParam(value="sq")String sq,
                          HttpServletRequest request,
                          HttpServletResponse response
                          ) {
 
      ModeAndView view = new ModeAndView();
      //... view 操作
      Cookie[] cookies = request.getCookies();
      String sessionId = request.getSession().getId();
      if (cookies == null) {
          Cookie cookie = new Cookie("jsESSIONID", sessionId);
          cookie.setMaxAge(5 * 60);
          cookie.setDomian("localhost");
          cookie.setPath("/hand");
          response.addCookie(cookie);
      } else {
          for (Cookie cookie : cookies) {
              if (cookie.getName().equals("JSESSIONID")) {
                  cookie.setMaxAge(5 * 60);
                  cookie.setValue(sessionId);
                  cookie.setDomain("localhost");
                  cookie.setPath("/hand");
                  response.addCookie(cookie);
                  break;
              }
          }
      }
 
      return view;
}

ajax 请求时带上cookie

在请求列表中加上xhrFields参数。

var s = $.ajax({
  type: "get",
  timeout: 8000,
  xhrFields: { withCredentials: true},
  url: "/hand/val",
  data: {"params": ""},
  success: function(rel) {
      console.log(rel)
  },
  error: function() {
      console.log("failed")
  },
  complete: function(XMLHttpRequest, status) {
      if (status == "timeout") {
          s.abort();
          console.log("timeout");
      }
  }
})

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springboot普通类中如何获取session问题

本文链接: https://www.lsjlt.com/news/177522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot普通类中如何获取session问题
    目录Spring中普通类获取session项目中日志功能解决方案SpringBoot中使用session基础知识在 Spring Boot中使用总结Spring中普通类获取sessi...
    99+
    2023-01-12
    springboot普通类 springboot普通类获取session springboot session
  • Springboot如何通过自定义工具类获取bean
    目录Springboot 自定义工具类获取bean在工具类注入bean的三种方式1. 需求/目的2.使用环境3.方法一:获取ApplicationContext上下文4.方法二:将工...
    99+
    2022-11-12
  • SpringBoot项目如何将Bean注入到普通类中
    目录如何将Bean注入到普通类中Spring管理的类获得一个注入的Bean方式非Spring管理的类获得一个注入的Bean方式普通类中通过ApplicationContext上下文获...
    99+
    2022-11-12
  • 如何解决SpringMvc中普通类注入Service为null的问题
    本篇内容介绍了“如何解决SpringMvc中普通类注入Service为null的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Sprin...
    99+
    2023-06-20
  • SpringBoot如何在线程中获取@ServiceBean类
    目录如何在线程中获取@Service Bean类我们现在开始解决问题多线程中获取bean对象创建类多线程中的调用方式如何在线程中获取@Service Bean类 这个适用于没有S...
    99+
    2022-11-13
  • 通过FeignClient如何获取文件流steam is close问题
    目录FeignClient获取文件流 steam is close问题原因解决办法FeignClient注解参数日志级别配置服务超时、重试、降级和熔断FeignClient获取文件流...
    99+
    2022-11-13
  • SpringBoot中如何解决读取properties文件读取问题
    目录如何解决读取properties文件读取问题问题描述路径设置中文乱码读取指定properties文件设置配置属性类型配置文件如何解决读取properties文件读取问题 问题描述...
    99+
    2022-11-13
  • Java中如何通过反射获取类的信息
    这篇文章主要为大家展示了Java中如何通过反射获取类的信息,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Java中如何通过反射获取类的信息”这篇文章吧。Java的特点有哪些Java的特点有哪些1....
    99+
    2023-06-06
  • php中如何获取访问类的数据呢
    这篇文章将为大家详细讲解有关php中如何获取访问类的数据呢,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。self是一种静态绑定,换言之就是当类进行编译的时候self已经明确绑定了类名,因此不论多少继承,也...
    99+
    2023-06-13
  • springBoot中使用@Value取值出现问题如何解决
    这篇文章主要介绍“springBoot中使用@Value取值出现问题如何解决”,在日常操作中,相信很多人在springBoot中使用@Value取值出现问题如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作