当前位置: 首页 > news >正文

02 - spring security基于配置文件及内存的账号密码

spring security基于配置的账号密码

文档

  1. 00 - spring security框架使用
  2. 01 - spring security自定义登录页面

yml文件中配置账号密码

spring:
  security:
    user:
      name: admin
      password: 123456
  • yml文件中配置账号密码后,控制台将不再输出临时密码

基于内存的账号密码

调整配置类WebSecurityConfig.java
package xin.yangshuai.springsecurity03.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
import org.springframework.security.config.annotation.web.configurers.FormLoginConfigurer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
// @EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        // 此时配置文件中的用户名和密码将不可用
        manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
        return manager;
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        // 开启授权保护
        http.authorizeRequests(new Customizer<ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry>() {
            @Override
            public void customize(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry expressionInterceptUrlRegistry) {

                expressionInterceptUrlRegistry
                        // 对所有请求开启授权保护
                        .anyRequest()
                        // 已经认证的请求会被自动授权
                        .authenticated();
            }
        });

        // 自定义登录页面
        http.formLogin(new Customizer<FormLoginConfigurer<HttpSecurity>>() {
            @Override
            public void customize(FormLoginConfigurer<HttpSecurity> httpSecurityFormLoginConfigurer) {
                // 自定义登录页,并且设置无需授权允许访问
                httpSecurityFormLoginConfigurer.loginPage("/login").permitAll();
                // 配置自定义表单的用户名参数,默认值:username
                httpSecurityFormLoginConfigurer.usernameParameter("myusername");
                // 配置自定义表单的密码参数,默认值:password
                httpSecurityFormLoginConfigurer.passwordParameter("mypassword");
                // 校验失败时跳转的地址,默认值:/login?error
                httpSecurityFormLoginConfigurer.failureUrl("/login?error");
            }
        });

        return http.build();
    }
}

  • 创建一个类型为UserDetailsService的Bean,实现类InMemoryUserDetailsManager可直接配置账号密码
  • 此时yml配置文件中的用户名和密码将不可用
  • 基于数据库的账号密码,也是在自定义的UserDetailsService实现类中,实现登录认证

相关文章:

  • 设计模式 --- 访问者模式
  • 【LeetCode】算法详解#4 ---合并区间
  • 进程线程回顾
  • Pinia最基本用法
  • Nginx基础讲解
  • ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程
  • 论文精度:HeightFormer:基于Transformer的体素高度预测在路边3D目标检测中的应用
  • flutter 桌面应用之右键菜单
  • 【Cursor 】Cursor 安装与配置指南:从零开始的高效开发之旅
  • QT6 源(16):存储 QT 里元对象的类信息的类 QMetaClassInfo 的类,只有两个成员函数 name()、value(),比元对象属性简单多了
  • 数据驱动,数字能量分析API助力手机号数据解读
  • RAG Fusion技术详解与应用场景
  • 趣味编程之Spring的白学之路
  • 二、Android Studio环境安装
  • [React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地
  • 波束形成(BF)从算法仿真到工程源码实现-第七节-关于波束10个基本概念
  • Jenkins 发送钉钉消息
  • 前端jest(vitest)单元测试快速手上
  • Redis基础知识:
  • 解释:指数加权移动平均(EWMA)
  • 上海小学生暑(寒)托班会增设开办期数、延长办班时间吗?团市委回应
  • 发射后失联,印度地球观测卫星发射任务宣告失败
  • 新城市志|GDP万亿城市,一季度如何挑大梁
  • 美国新泽西客运公司遭遇罢工:40年来首次,35万人受影响
  • 纪念|脖子上挂着红领巾的陈逸飞
  • 多个“首次”!上市公司重大资产重组新规落地