最近在项目中遇到了一个单点登录的问题,就做了一个研究了下并做了实验,并分享给大家,有意见请指正~~~~
关于SSO的定义等一些相关的问题请自行百度,这里只说实现~~~~~~
首先呢,我做的SSO的实现在验证等操作全部是在服务器端实现的:
思路如下:
1、用户登录后,生成一个16位长度的Token字符串
2、将Token发回到客户端,在服务器端,将生成的Token和用户信息放到一个全局唯一的存储结构中
3、设置Token的过期时间和最后一次操作时间
4、每次用户进行操作时,验证Token是否过期,如过期要求重新登录,否则直接操作,并更新最近一次操作时间
5、后台线程定期检测Token的存储结构,将过期的Token移除
行了,直接来看实现吧:
我们将过期时间间隔,以及Token的字符串长度的设置都在配置文件中:如下SystemComfig.properties
TOKENTIMEOUT=1 设置的Token的过期时间,这里用的1分钟,方便实验,根据系统自行设定即可
TOKEN_BYTE_LEN=12 8--->10; 10--->14; 12--->16 具体的在实验的时候看下就可以了
解析配置文件的类:SystemConfigConstants.java
public class SystemConfigConstants {
//Token过期时间
public static final int TOKENTIMEOUT;
//用于生成的Token长度
public static final int TOKEN_BYTE_LEN;
/*
* 取值过程
*/
static{
//配置文件读取
InputStream stream = n