首页 > 其他分享 >SpringSecurity

SpringSecurity

时间:2023-09-20 11:26:50浏览次数:34  
标签:spring 用户 认证 密码 SpringSecurity id

 

1.什么是SpringSecurity

进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。

系统为什么要认证?

认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。

认证:用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机短信登录,指纹认证等方式。

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。

 

1.1 授权的数据模型

主体、资源、权限相关的数据模型如下:

主体(用户id、账号、密码、…)

权限(权限id、权限标识、权限名称、资源名称、资源访问地址、…)

角色(角色id、角色名称、…)

角色和权限关系(角色 id、权限id、…)

主体(用户)和角色关系(用户id、角色id、…)

 

 

1.2  SpringSecurity的核心功能:

用户认证(Authentication):系统判断用户是否能登录

用户授权(Authorization):系统判断用户是否有权限去做某些事情

SpringSecurity 特点:

Spring 技术栈的组成部分,与Spring 无缝整合。

全面的权限控制,能提供完整可扩展的认证和授权支持保护

专门为 Web 开发而设计。

重量级,需要引入各种家族组件与依赖

 

 2. 使用SpringSecurity

2.1 创建springboot勾选

可以在创建springboot工程时勾选Security的SpringSecurity的依赖包

 

2.2 自加依赖

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

 运行直接访问localhost:8080 会重定向到此页面

 

该页面在登录的时候默认的用户名是user密码显示在控制台

 

2.3 SpringSecurity 基本原理

SpringSecurity 本质是一个过滤器链,由许多过滤器组成,重点看一下几个过滤器:

(ctrl+N进行全局搜索)

ExceptionTranslationFilter: 异常过滤器,用来处理在认证授权过程中抛出的异常

 

表单登录

https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html

https://docs.spring.io/spring-security/reference/servlet/authentication/passwords/form.html

提交用户名和密码后,将对用户名和密码进行身份验证。 扩展了 AbstractAuthenticationProcessingFilter,因此下图应该看起来非常相似:

 

源码剖析:

 

 

2.4 自定义SpringSecurity账户和密码

2.4.1 根据application配置文件配置

spring.security.user.name=root

spring.security.user.password=root

 

2.4.2 根据配置类配置账户信息

 在config层中创建SecuityConfig 配置类

其中最重要的是让其 extends WebSecurityConfigurerAdapter 类 ,重写AuthenticationManagerBuilder方法

@Configuration
public class SecuityConfig extends WebSecurityConfigurerAdapter {

    //创建密码加密器
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    };
    //注入密码加密器
    @Autowired
    public PasswordEncoder passwordEncoder;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                //账户
                .withUser("root")
                //该账户具备的角色
                .roles("ROOT")
                //密码---密码加密
                .password(passwordEncoder.encode("root"));
    }
}

 

3. 自定义认证

3.1 SecurityController配置类

3.2 创建service层且实现UserdetailService接口

3.3 controller层资源重定向

3.4 重定向success页面

3.5 自定义登录页面

 


以上便是SpringSecurity中的内容,如有漏缺请在下方留言告知,我会及时补充 

标签:spring,用户,认证,密码,SpringSecurity,id
From: https://www.cnblogs.com/9--1/p/17705772.html

相关文章

  • [SpringSecurity5.6.2源码分析十一]:CorsFilter
    前言• 跨域:两个域名的(协议、域名/ip、端口)有任意一个不同即视为跨域• 跨域资源共享(Cors):即浏览器允许访问其他跨域的资源• 而CorsFilter就是SpringSecurity用来处理Cors的过滤器1.CorsConfigurer• CorsConfigurer是CorsFilter对应的配置类,其中就只有一个重要方法• co......
  • [SpringSecurity5.6.2源码分析十]:HeaderWriterFilter
    前言• 为了安全考虑,添加启用浏览器保护的某些头是很有用的,比如X-Frame-Options,X-XSS-Protection和X-Content-Type-Options• 而HeaderWriterFilter就支持往响应头写入各种响应头1、HeadersConfigurer• HeadersConfigurer是HeaderWriterFilter对应的配置类,是在获取HttpSecur......
  • [SpringSecurity5.6.2源码分析八]:SecurityContextPersistenceFilter
    前言• 当我们不在其他线程而就在容器创建的线程中使用SecurityContextHolder.getContext()获取SecurityContext的时候,正常都能获取到• SecurityContext默认是放在线程中的,所以说在某个地方一定将SecurityContext放到线程中,而这个类就是SecurityContextPersistenceFilter1、Secu......
  • [SpringSecurity5.2.2源码分析七]:WebAsyncManagerIntegrationFilter
    1、作用• 是为了接口返回异步对象,然后执行异步任务也能通过SecurityContextHolder获取SecurityContext• 比如说返回值是WebAsyncTask的时候2、WebAsyncManagerIntegrationFilter• 源码很短就是在WebAsyncManager中注册了SecurityContextCallableProcessingInterceptorpublic......
  • [SpringSecurity5.6.2源码分析六]:ChannelProcessingFilter
    1、基础用法• ChannelProcessingFilter是SpringSecurity的第一个过滤器,具体排序规则见FilterComparator,image.png• 主要作用:可限制服务端接受的安全协议,比如说仅支持Https或者Http1.1开启配置类:• 首先我们注册到容器中的WebSecurityConfigurerAdapter是针对于WebSecurity的......
  • SpringSecurity中注解讲解
    目录[email protected]@PreAuthorize1.1.1开启注解1.1.2使用注解原生方法1.1.3使用注解自定义方法[email protected]@Secured2其他注解[email protected]@PreFilter3权限表达式1@EnableGlobalMethodSecurity@EnableGlobalMethodSecurity是Spring......
  • [SpringSecurity5.6.2源码分析四]:WebSecurityConfiguration
    WebSecurityConfiguration的重点是通过WebSecurity创建FilterChainProxy• 先分析内部的方法1、elegatingApplicationListener• 看名字就能看出来注册了一个委托类型的监听器publicclassWebSecurityConfigurationimplementsImportAware,BeanClassLoaderAware{............
  • springsecurity
    编辑 pom.xml,添加 spring-boot-starter-securtiy 依赖即可。添加后项目中所有的资源都会被保护起来。<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-security</artifactId></dependency>编写SecurityConfig......
  • [SpringSecurity5.6.2源码分析三]:SpringWebMvcImportSelector
    1、SpringWebMvcImportSelector• SpringSecurity支持在SpringMVC进行参数解析的时候填充参数,支持以下的对象• 通过@AuthenticationPrincipal,获取UserDetails• 通过@CurrentSecurityContext,获取SecurityContext• 通过参数类型为CsrfToken获取CsrfToken• 究其原因是因为Spr......
  • [SpringSecurity5.6.2源码分析二]:SecurityAutoConfiguration
    • SecurityAutoConfiguration是SpringSecurity最重要的一个自动配置类• 像以前版本的教程说要在启动类上配@EnableWebSecurity,现在也是由这个自动配置类负责引入• 分析一 已经介绍了DefaultAuthenticationEventPublisher,所以说重点就只有使用@Import导入的三个类,SpringBo......