java单点登录框架_单点登录系统实现基于SpringBoot

本文详细介绍了如何使用SpringBoot构建单点登录系统,包括单点登录与传统登录的区别、系统设计思路,以及如何通过Java配置整合Spring、HttpClient和Redis来实现Session共享。讲解了配置文件、关键代码和整合步骤,帮助读者掌握单点登录系统实现的核心技术。
摘要由CSDN通过智能技术生成

今天的干货有点湿,里面夹杂着我的泪水。可能也只有代码才能让我暂时的平静。通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClient,整合Redis ,HttpClient简易教程。还在等什么?撸起袖子开始干吧!

效果图:8081端口是sso系统,其他两个8082和8083端口模拟两个系统。登录成功后检查Redis数据库中是否有值。

97a708c363469e237b67e03f5f8e3c8a.gif

技术:SpringBoot,SpringMVC,Spring,SpringData,Redis,HttpClient

说明:本章的用户登录注册的代码部分已经在SpringBoot基础入门中介绍过了,这里不会重复贴代码。

源码:见文章底部

SpringBoot基础入门:http://www.cnblogs.com/itdragon/p/8047132.html

单点登录系统简介

fda9c6ff0eed03adc1080119a40cf73d.png

在传统的系统,或者是只有一个服务器的系统中。Session在一个服务器中,各个模块都可以直接获取,只需登录一次就进入各个模块。若在服务器集群或者是分布式系统架构中,每个服务器之间的Session并不是共享的,这会出现每个模块都要登录的情况。这时候需要通过单点登录系统(Single Sign On)将用户信息存在Redis数据库中实现Session共享的效果。从而实现一次登录就可以访问所有相互信任的应用系统。

单点登录系统实现

Maven项目核心配置文件 pom.xml 需要在原来的基础上添加 httpclient和jedis jar包

org.apache.httpcomponents

httpclient

redis.clients

jedis

Spring4 Java配置方式

这里,我们需要整合httpclient用于各服务之间的通讯(也可以用okhttp)。同时还需要整合redis用于存储用户信息(Session共享)。

在Spring3.x之前,一般在应用的基本配置用xml,比如数据源、资源文件等。业务开发用注解,比如Component,Service,Controller等。其实在Spring3.x的时候就已经提供了Java配置方式。现在的Spring4.x和SpringBoot都开始推荐使用Java配置方式配置bean。它可以使bean的结构更加的清晰。

整合 HttpClient

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

HttpClient4.5系列教程 : http://blog.csdn.net/column/details/httpclient.html

首先在src/main/resources 目录下创建 httpclient.properties 配置文件

#设置整个连接池默认最大连接数

http.defaultMaxPerRoute=100

#设置整个连接池最大连接数

http.maxTotal=300

#设置请求超时

http.connectTimeout=1000

#设置从连接池中获取到连接的最长时间

http.connectionRequestTimeout=500

#设置数据传输的最长时间

http.socketTimeout=10000

然后在 src/main/java/com/itdragon/config 目录下创建 HttpclientSpringConfig.java 文件

这里用到了四个很重要的注解

@Configuration : 作用于类上,指明该类就相当于一个xml配置文件

@Bean : 作用于方法上,指明该方法相当于xml配置中的,注意方法名的命名规范

@PropertySource : 指定读取的配置文件,引入多个value={"xxx:xxx","xxx:xxx"},ignoreResourceNotFound=true 文件不存在时忽略

@Value : 获取配置文件的值,该注解还有很多语法知识,这里暂时不扩展开

package com.itdragon.config;

import java.util.concurrent.TimeUnit;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.impl.client.IdleConnectionEvictor;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.PropertySource;

import org.springframework.context.annotation.Scope;

/**

* @Configuration 作用于类上,相当于一个xml配置文件

* @Bean 作用于方法上,相当于xml配置中的

* @PropertySource 指定读取的配置文件

* @Value 获取配置文件的值

*/

@Configuration

@PropertySource(value = "classpath:httpclient.properties")

public class HttpclientSpringConfig {

@Value("${http.maxTotal}")

private Integer httpMaxTotal;

@Value("${http.defaultMaxPerRoute}")

private Integer httpDefaultMaxPerRoute;

@Value("${http.connectTimeout}")

private Integer httpConnectTimeout;

@Value("${http.connectionRequestTimeout}")

private Integer httpConnectionRequestTimeout;

@Value("${http.socketTimeout}")

private Integer httpSocketTimeout;

@Autowired

private PoolingHttpClientConnectionManager manager;

@Bean

public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() {

PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();

// 最大连接数

poolingHttpClientConnectionManager.setMaxTotal(httpMaxTotal);

// 每个主机的最大并发数

poolingHtt

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值