简介
最近在使用Gin重构之前的SpringBoot后台,虽然现在使用JWT来做登录鉴权比较流行,但是为了保持接口的一致性还是选择使用session机制来做登录鉴权,在Gin中使用得比较多的session中间件是gin-contrib/sessions,项目的GitHub上有简单使用教程,这里记录一下对其的封装,能通过session获取到当前登录用户的信息。
需求
之前的SpringBoot项目大致可以看作是一个微型的Blog平台,有许多操作如更新、删除文章通常要鉴定权限,只有本人才能更新、删除,当时的设计是当用户登录时用seesion存储用户的基本信息(ID、Email等),之后调用更新、删除API时就只用传文章相关的参数,不需要传用户参数(用户参数可以通过header中的sessionId获取)。当时使用的Shiro来管理session,通过调用Shiro的SecurityUtils就能获取到session数据,由于有许多接口都可能要用到当前登录用户的信息,所以写了一个BaseController来封装通过session读取用户信息,之后需要用到这个功能的Controller就继承BaseController。
import org.apache.shiro.SecurityUtils;
public abstract class BaseController {
/**
* 返回当前登录用户信息,User是自定义的用户类,存储用户ID、Email等信息
* @return
*/
protected User getCurrentUser(){
// 调用Shiro相关接口即可,都不需要上下文参数
return (User) SecurityUtils.getSubject().getSession().getAttribute("currentUser");
}
/**
* 设置当前登录用户的信息
* @param user
*/
protected void setCurrentUser(User user){
SecurityUtils.getSubject().getSession().setAttribute("currentUser", user);
}
}
在Gin中使用Session
gin-contrib/sessions官方给出的使用教程如下"secret"表示的是生成sessionID时的密钥,随便填个字符串就行;"mysession"表示的是返回给前端的sessionId名称,比如我填"SESSIONID"那么返回給前端的cookie数据就有SESSIONID这个字段
<