分布式会话与单点登录SSO

内容纲要

分布式会话

当用户登录注册后为用户产生一条token信息,并存入到redis中

使用spring的session管理

#引入
<!--引入spring session-->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<!--引入spring安全框架-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
#配置信息
spring:
  session:
    store-type: redis
# 开启redishttpsession,在启动类上添加注解
@EnableRedisHttpSession //开启使用redis作为spring session

由于spring安全框架的机制,访问后台接口需要使用用户名和密码进行登录可以在@SpringBootApplication注解中排除
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
在开发过程中如果只有java平台开发,则可以直接使用spring session,而如果有其他语言介入的后端系统则尽量使用token的方式

拦截器

在springboot中自定义拦截器需要实现HandlerInterceptor类,并实现preHandle,afterCompletion和postHandle三个方法

  • preHandle:拦截请求,在访问controller调用之前
  • postHandle:请求访问controller,渲染视图之前
  • afterCompletion:请求访问controller,渲染视图之后
    消息返回格式为JSON

    public void returnErrorResponse(HttpServletResponse response, JSONResult result) {
    OutputStream out = null;
    try {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/json");
        out = response.getOutputStream();
        out.write(JsonUtils.objectToJson(result).getBytes("utf-8"));
        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    }

    单点登录SSD

    项目地址:慕课网SSO单点登录
    时序图

THE END
分享
二维码
< <上一篇
下一篇>>