IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot 笔记五——用户认证授权(Spring Security 、Oauth2、JWT)--未完待续 -> 正文阅读

[Java知识库]Spring Boot 笔记五——用户认证授权(Spring Security 、Oauth2、JWT)--未完待续

一、用户认证授权

在系统中最基础的就是用户登陆,一般系统用到的登陆有2种,分别是账号密码和手机验证码。本笔记以账号密码登陆为例,手机验证码登陆等整个框架基本搭好后再写。

1.1 需求分析

   用户使用一个系统其实就是访问系统里的每一个功能,在浏览器中对应的就是一个个网页。一个正常的系统,那么肯定存在有些网页不需要权限,所有人都能访问,例如首页,登录页面,找回密码页面等;有些页面则需要用户登陆后才能访问,例如管理页面等。那么这就需要给用户授权,当然根据项目的实际需求,授权也分为功能授权和数据授权,这2块就比较复杂了,以后有机会再说,我这里只做登陆授权的案例。

1.2 单点登录

  单点登陆其实就是只要登陆一次可以无缝访问多个相关子项目。具体的含义自行百度。

1.3 第三方认证

第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的接口协议。目前应用比较广泛的是Qauth2认证。

二、搭建认证服务

2.1基本需求

本案例认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定义了用户身份信息的内容。 关于Spring Security 、Oauth2、JWT 可以网上搜索资料,这里就不展开了。
我这里简单说下认证服务的逻辑,
1、用户填写用户名、密码提交到后台,后端按照Spring Security安全框架标准去判断用户名密码是否正确。
2、用户名密码填写正确则根据项目的实际情况做相应的业务处理,例如简单一点的就是获取用户的基本信息,复杂的就需要获取用户的角色权限和数据权限等。这些数据保存到Redis中。
3、在配置文件中设置登陆时效,并且通过定义一种标准来更新登陆时效,类似于最早的用session作为登陆权限判断时自带的过期时间。
4、同一个账号,同时只能登陆一个终端,后登录的会踢掉之前登陆者。

2.2 Redis 整合

2.2.1先在框架pom.xml中引入Redis

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
			<exclusions>
                <!-- 默认指定了 lettuce,需要排除并引入jedis的客户端-->
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
		</dependency>		
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

2.2.2 配置文件

application.yml
注意:为了简便,下面的配置中我将druid删除了,有需要的查看《笔记三》

spring:
  datasource:
    name: test
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&serverTimezone=GMT&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
    username: root
    password: 123456
    # 使用druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver   
  redis:
    database: 1
    host: 127.0.0.1 
    port: 6379 
    password: 123456
    timeout: 5000
    jedis: 
      pool:
        max-active: 500
        max-wait: 5000
        max-idle: 400
        min-idle: 50

2.2.3 配置类

@Configuration
public class RedisConfig {
	@Bean
	public RedisTemplate<String, Object> redisTemplate(final RedisConnectionFactory factory) {
		final Jackson2JsonRedisSerializer<Object> j = new Jackson2JsonRedisSerializer<Object>(Object.class);		
		// value序列化
		final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
		redisTemplate.setValueSerializer(j);
		redisTemplate.setHashValueSerializer(j);
		// key序列化;(不然会出现乱码)
		RedisSerializer<?> stringSerializer = new StringRedisSerializer();
		redisTemplate.setKeySerializer(stringSerializer);
		redisTemplate.setHashKeySerializer(stringSerializer);
		redisTemplate.setConnectionFactory(factory);
		redisTemplate.afterPropertiesSet();
		return redisTemplate;
	}
}

2.2.4 Redis 工具类

可以参考前面的文章,限于篇幅,就不多说了。
Springboot整合Redis(三) : 整合Redis
springboot集成redis高并发下同时保存获取字符串和对象时出现异常的解决办法

2.2.5 测评Redis

@SpringBootTest(classes = { DemoApplication.class })
class DemoApplicationTests {
	@Autowired
	HnRedisUtils hnRedisUtils;
	@Test
	void add() {
		hnRedisUtils.set("username", "半路凉亭");
	}
}

运行add后,查看redis,如下图说明Redis集成成功
在这里插入图片描述

2.3 Spring Security

2.3.1 引入

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

本案例是通过账号密码方式做登陆认证的,而spring security框架本身就自带密码认证功能,只要按照框架的认证标准创建相应的步骤即可完成认证操作,非常方便。当然,在现实项目中可能除了需要用密码登陆外,还需要用手机验证码登陆,这块要按照spring security框架的结构自定义一些模块即可,后期有机会再写。

2.3.2 项目配置

一个项目的标准化登陆有以下几项设置:不用认证的页面、登陆的失效时间、是否可以多终端登陆等。
application.yml

token:
  expire:
    seconds: 3600 #登录失效时长 单位:秒
  jwtSecret: H@+N#-M*$S*7TA*R
login:
  isMulti: true #是否可以多点登录
  passwordParameter: password #修改登录的密码框名称,默认是password
  loginHTML: /login.html #登陆页面地址
  loginProcessingUrl: /login #登录处理地址,只是别名
  permitAllUrl: /, /*.html, /login/**, /druid/** #不做登录拦截的地址

未完待续…

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:36:58  更:2021-07-30 12:37:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 18:44:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码