0
点赞
收藏
分享

微信扫一扫

Splitpanes拆分窗格插件使用

IT程序员 04-11 19:00 阅读 0

目录

 1. 使用servlet原生方法获取Session

1.1 错误获取方法

1.2 正确获取方法

2. 使用Spring注解获取Session

3. 使用Spring内置对象获取Session


 1. 使用servlet原生方法获取Session

.java文件内容如下:

setSession方法用于设置Session对象的内容;

getSession方法用于获取Session对象的内容;

package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/Para")
@RestController
public class ParaController {
    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request){
        HttpSession session = request.getSession();
        session.setAttribute("username", "zhangsan");
        return "Session set successfully";
    }
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request){
        HttpSession session = request.getSession();
        if(session!=null){
            String username = (String) session.getAttribute("username");
            return "UserInformation: username is "+username;
        }
        return "Session is null";
    }
}

运行启动服务器,

1.1 错误获取方法

现试直接访问getSession:

发现并未设置session的内容;

1.2 正确获取方法

session是服务器的机制,无法伪造。需要在服务器端编写程序实现session的存取;

在本例中,setSession方法就是用于实现session的存取;

1. 首先访问setSession方法:

我们会发现在cookie列表中新增了一项名为JSESSIONID的cookie;

2. 使用Fiddler抓包查看HTTP请求与响应:

HTTP请求内容如下:

HTTP响应内容如下:

sessionId是连接cookie与session的桥梁,根据响应中的set-session报头实现客户端cookie的设置;

3. 此时再访问getSession方法:

可见session获取成功;

注:1. getSession方法可以携带一个布尔值的参数,表示在没有session时是否创建session:

默认情况下为true,表示当没有session时,创建一个session

2. session本质就是一个哈希表,其存储情况如下:

在服务器中对不同的客户端都会有session,getSession方法就是根据SessionId获取到Session对象;

2. 使用Spring注解获取Session

1. 可以使用Spring提供的注解@SessionAttribute获取Session

2. Session是服务器的机制,重启服务器后Session会丢失

.java内容如下:

package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/Para")
@RestController
public class ParaController {
    @RequestMapping("/getSession2")
    public String getSession(@SessionAttribute String username){
        return "username: "+username;
    }
}

运行启动服务器,根据URL访问getSession2方法,页面如下:

查看服务器日志:

Ctrl+左键查看@SessionAttribute源码

手动设置为false即可,修改后的.java文件中getSession2方法如下:

    @RequestMapping("/getSession2")
    public String getSession(@SessionAttribute(required = false) String username){
        return "username: "+username;
    }

运行启动服务器,再次访问getSession2方法有:

再次访问上一例中setSession方法对session进行设置:

再次访问getSession2方法:

可见此时session获取成功;

3. 使用Spring内置对象获取Session

Spring内置了HttpSession对象,当方法参数为HttpSession session时,

等同于使用servlet原生方法中使用HttpSession session = request.getSession(true);

.java内容如下:

package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/Para")
@RestController
public class ParaController {
    @RequestMapping("/getSession3")
    public String getSession(HttpSession session){
        String username = (String) session.getAttribute("username");
        return "UserInformation: username is "+username;
    }
}

运行启动服务器后,同上例,先运行setSession后,再访问getSession3,流程相同,不再赘述;

访问结果为:

举报

相关推荐

0 条评论