Spring Security前置内容+关键内部类

server/2024/12/17 19:00:45/

目录

  • 前置内容
    • 认证与授权
    • 配置和配置类
  • security内部的关键类
    • UserDetails
    • User
    • UserDetailsService(加载用户数据,提供用户信息)


前置内容

认证与授权

认证即系统判断用户的身份是否合法,合法可继续访问,不合法则拒绝访问。(如密码登录)
授权即认证通过后,根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有权限则拒绝访问。(如非VIP用户拒绝使用)

配置和配置类

配置
配置没什么特殊点,在创建项目时引用,或者直接在pom文件中增加如下的依赖即可
pom.xml

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

在项目中使用Security框架,需要创建security的配置类(这个配置类就是后面的这些内容,认证和授权都在配置类中完成定义)
配置类
描述:定义security中的密码编码器等相关的配置

package com.wunaiieq.tmp2024121105.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
//security的配置类
@Configuration
public class SecurityConfig {//密码默认加密,此处配置密码编码器,设置不解析密码@Beanpublic PasswordEncoder passwordEncoder(){return NoOpPasswordEncoder.getInstance();}
}

目录结构
在这里插入图片描述

security内部的关键类

UserDetails

类型:接口
作用:实现UserDetails接口以提供security中的用户基本信息,如账号密码、权限等级等。
内部属性

方法名返回类型描述
getAuthorities()Collection<? extends GrantedAuthority>返回授予用户的权限集合。这些权限通常表示用户能够执行的操作或访问的资源。GrantedAuthority是一个接口,它的实现类包含了权限的具体信息。
getPassword()String返回用户的密码。在大多数实现中,这个密码是经过加密的,而不是明文密码。这是为了安全起见,避免在应用程序中存储或传输明文密码。
getUsername()String返回用户的用户名。这是用户登录时使用的唯一标识符,用于在身份验证过程中识别用户。
isAccountNonExpired()boolean返回一个布尔值,指示用户的账户是否未过期。如果账户已过期,用户将无法登录或执行需要身份验证的操作。
isAccountNonLocked()boolean返回一个布尔值,指示用户的账户是否未被锁定。如果账户被锁定,用户将无法登录,这通常是由于多次尝试登录失败或其他安全原因。
isCredentialsNonExpired()boolean返回一个布尔值,指示用户的凭据(如密码)是否未过期。如果凭据已过期,用户将需要更新凭据才能登录。
isEnabled()boolean返回一个布尔值,指示用户的账户是否启用。如果账户被禁用,用户将无法登录,即使他们的用户名和密码是正确的。
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
import java.util.Collections;
public class CustomUserDetails implements UserDetails {private String username;private String password;private Collection<? extends GrantedAuthority> authorities;// 其他用户信息字段,如姓名、电子邮件等// 构造函数,用于初始化用户信息public CustomUserDetails(String username, String password, Collection<? extends GrantedAuthority> authorities) {this.username = username;this.password = password;this.authorities = authorities;}// 实现UserDetails接口的方法@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {return authorities;}@Overridepublic String getPassword() {return password;}@Overridepublic String getUsername() {return username;}
}

User

类型:UserDetails的实现类
作用:作为security的测试包中的辅助类,不建议接入生产,生产环境中的用户类还是需要自行定义,定义方法如上(实现UserDetails)

UserDetailsService(加载用户数据,提供用户信息)

类型:接口
作用:UserDetailsService方法loadUserByUsername根据用户名加载用户信息,并返回一个UserDetails对象(认证逻辑,这一部分可以做出一定的修改)。这个对象随后会被AuthenticationProvider用于与用户输入的账号密码等认证信息进行比较,以判断用户身份是否有效。关于AuthenticationProvider类的内容一般不做修改
内部方法: loadUserByUsername(String username),该方法根据用户名加载用户的详细信息。

在这里插入图片描述


http://www.ppmy.cn/server/150973.html

相关文章

vue2中echarts

如图示&#xff1a; 第一个&#xff1a; <div ref"charts" style"width:100%;height:99px;"></div> import * as echarts from echarts;mounted() {this.drawLine();},methods: {drawLine() {// 基于准备好的dom&#xff0c;初始化echarts实例…

代码随想录算法训练营第一天 | 数组理论基础,977.有序数组平方结果再排序

题目说明&#xff1a;数组本身有序&#xff0c;且元素值可通用负数&#xff08;注意不是复数&#xff09;&#xff0c;平方结果值还能以有序方式排列 标准想法就是在原数组基础上&#xff0c;把所有元素求平方结果值 再将这个有新结果值的数组&#xff0c;进行排序 生成平方…

操作系统(11)程序处理

前言 操作系统&#xff08;OS&#xff09;是管理计算机硬件与软件资源的计算机程序&#xff0c;它在计算机系统中扮演着至关重要的角色。 一、操作系统的作用 操作系统是直接运行在计算机上的系统软件&#xff0c;具有承上启下的作用。它向下控制硬件&#xff0c;向上支持软件的…

【从零开始入门unity游戏开发之——C#篇05】转义字符、@处理多行文本或者不使用转义字符、随机数

文章目录 一、转义字符1、什么是转义字符&#xff1f;2、常见的转义字符3、总结 二、使用处理多行文本或者不使用转义字符1、多行字符串2、不使用转义字符 三、随机数1、Random.Next()生成随机整数示例&#xff1a;生成一个随机整数生成指定范围内的随机整数 2、Random.NextSin…

最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南

全开源IM&#xff08;即时通讯&#xff09;系统源码部署是一个复杂但系统的过程&#xff0c;涉及多个组件和步骤。以下是一个详细的部署指南&#xff0c;旨在帮助开发者或系统管理员成功部署一个全开源的IM系统&#xff0c;如OpenIM。      IM即时通讯系统源码准备工作   …

web 五子棋小游戏

效果图 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Gomoku</title><link rel&q…

找出1000以内的所有回文数

找出1000以内的所有回文数 方法概述检查回文数的方法伪代码C代码实现代码解析运行结果在计算机科学中,回文数是一种具有对称性质的数,即从左向右读和从右向左读都是相同的。例如,121、1331、12321都是回文数。本文将利用数据结构、C语言和算法的知识来编写一个程序,找出100…

android 聊天界面键盘、表情切换丝滑

1、我们在聊天页面时候&#xff0c;往往会遇到&#xff0c;键盘、表情、其他选择切换时候页面会出现掉下来再弹起问题&#xff0c;这是因为&#xff0c;我们切换时候&#xff0c;键盘异步导致内容View高度变化&#xff0c;页面掉下来后&#xff0c;又被其他内容顶起这种很差视觉…