一.非单点登陆模式(SSM 环境)
总体思路:拦截 Http 请求,校验用户名密码是否正确;正确放行,否则跳转登录页。
实现方式:
1.使用 servlet Filter 实现。
2.使用 spring mvc 拦截器实现。
下面介绍基于 interceptor 实现方式:
自定义类实现 HandlerInterceptor 接口。此接口有三个方法:
preHandle():预处理,Http 请求被前端控制器 DispatcherServlet 拦截之后,到达具体 controller 之前执行的动作。
postHandle():Http 请求执行完成之后,渲染页面之前执行的动作。
afterCompletion():页面渲染完成后执行的动作。
在 preHandle()方法里加入登录逻辑的判断:校验通过,放行,并存放用户信息(用户 id,角色 code,权限 code,部门等)到 session 里,同一个 session 无需再走是否登录逻辑。
spring-mvc.xml 配置文件中配置自定义 Interceptor。
多节点环境部署的话利用 memcached 做 session 共享,tomcate 的 context.xml 配置如下:
二.单点登陆
随着业务系统的增多,每个系统单独维护用户信息这种方式显得异常繁琐,不便维护。在多业务系统环境下,集中管理和维护用户,权限等信息。
原理:
这里写图片描述
拦截 Http 请求(Servlet Filter),校验是否登录;未登录则重定向到 SSO 认证中心,校验用户名和密码,成功并生成 token 作为参数返回业务系统,业务系统并保存此 session(供单点注销使用)。部署图如下:
这里写图片描述
涉及两个单独工程:1.sso-client.jar(单点登陆 Filter, 单点注销 Filter) 。2.sso-server.war(sso 认证 web 工程,校验用户名密码以及 token)
注意点:多节点部署业务系统,保存 session 时需要集中保存。
三.单点注销
删除 sso 的 session 及业务系统 session。(session.invalidate())
流程如下图:
这里写图片描 https://b3logfile.com/e/bec7f6f311ef47448f99b23ddc68db82.pnhttps://b3logfile.com/e/e9a94bf65a384d80af5c4bb3d2e6946b.pnhttps://b3logfile.com/e/13ec18134cbb4f119e9f27a8456668b1.png
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于