一.非单点登陆模式(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配置如下:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
sticky="false"
lockingMode="auto"
memcachedNodes="n1:172.0.0.1:8888"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false" />
二.单点登陆
随着业务系统的增多,每个系统单独维护用户信息这种方式显得异常繁琐,不便维护。在多业务系统环境下,集中管理和维护用户,权限等信息。
原理:
拦截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())
流程如下图: