SpringBoot的httpSession(专题六)

文章介绍了在SpringBoot中如何使用HttpSession进行会话管理,包括通过HttpServletRequest.getSession()获取HttpSession,使用setAttribute()设置会话属性,以及通过getAttribute()获取属性。同时提到了HttpSession的工作原理,如服务器为每个用户创建独立的Session,并通过Cookie中的SessionID保持会话状态。此外,还提及了WebUtils工具类在设置和获取Session属性时的应用。
摘要由CSDN通过智能技术生成

关于SpringBoot中HttpSession(Http会话)基本用法记录


1、获取HttpSession的方法

HttpServletRequest.getSession()方法获取当前的HttpSession

简单翻译一下,便于大家理解

HttpServletRequest:Http程序请求

getSession:获取对话


2、设置(补充了获取)session(会话)的属性

使用HttpSession.setAttribute()方法设置会话的属性,会话值可以是任何对象

@GetMapping("/setValue)
public String setValue(HttpServletRequest request){
    HttpSession session = request.getSession();
    session.setAttribute("key","value");
   
    return "ok";

}

对上面的代码简单解释一下:

  1. HttpServletRequest

公共接口类HttpServlentRequest继承自ServletRequest。客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。对象包含了客户端请求信息包括:请求的地址、请求的参数、提交的数据,上传文件客户端的ip甚至是客户端的操作系统都包含在其中。

补充:HttpServletResponse继承了ServletResponse接口,并提供与Http协议有关的方法,这些方法的主要功能是设置Http的状态码和管理cookie

  1. HttpSession

HttpSession服务端技术

服务器会为每一个用户创建一个独立的HttpSession

HttpSession的原理

当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Session,并且生成一个SessionID,这个SessionID在响应浏览器的时候会被装进cookie中,从而保存到浏览器中。

当用户再一次访问Servlet时,请求中会携带者cookie中的SessionID去访问,服务端会根据这个SessionId去查看是否有对应的Session对象,有就拿出来使用,没有就执行第一步。

补充:域的作用范围

Context>Session>Request

Session:只要会话不结束就存在,但是Session有默认的存活时间(30分钟)--》这一点可以考虑用来做信息失效的验证

3、request.getSession

获取客户端传来的数据

4、session.setAttribute

设置session的信息

补充:session.getAttribute,用法跟set趋同,根据key获取value


3、java提供的WebUtils工具
  1. 设置session

WebUtils.setSessionAttribute(request,"key","value")

  1. 获取session

WebUtils.getSessionAttribute(request,"key")


4、获取所有会话的属性

使用Enumberation e = session.getAttributeNames()获取所有会话名称,然后使用HttpSession.getAttribute()方法获取会话属性

简单解释一下:Enumberation枚举类

public String getAll(HttpServletRequest request){
    HttpSession session = request.getSession();
    Enumberation e = session.getAttributeNames();
    while(e.hasMoreElements()){
        Object key=e.nextElement();
        session.getAttribute(key.toString());
    }
return "ok";
}

"Place sign in" 错误通常出现在使用 Spring Security 进行身份验证的应用程序中。这通常意味着用户没有通过身份验证并且没有正确的会话信息。可能的原因是在使用 HttpSession 时,没有正确地配置 Spring Security。 为了解决这个问题,你可以尝试以下步骤: 1. 确保在 Spring Security 配置中启用了会话管理: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.ALWAYS); } } ``` 2. 确保使用 Spring Security 进行身份验证时,正确地配置了 HttpSession: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.ALWAYS) .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .logoutSuccessUrl("/") .permitAll() .and() .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("password").roles("USER") .and() .withUser("admin").password("password").roles("USER", "ADMIN"); } } ``` 3. 确保在使用 HttpSession 时,正确地配置了 Spring Boot 的属性: ```properties # application.properties server.servlet.session.timeout=30m ``` 如果你仍然遇到问题,可能需要进一步检查你的代码和配置是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值