分布式会话与单点登录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,渲染视图之后
消息返回格式为JSONpublic 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单点登录
时序图
共有 0 条评论