首页 > 其他分享 >SpringSecurity - [01] 概述

SpringSecurity - [01] 概述

时间:2024-12-05 15:23:16浏览次数:3  
标签:01 Spring springframework SpringSecurity 概述 import org security Security

Spring Security 是一个灵活且强大的工具,可以帮助你构建安全可靠的Spring应用程序。它不仅简化了认证和授权的过程,而且还提供了丰富的特性和扩展点,使得开发者可以根据项目的独特需求定制安全策略。无论是小型的内部工具还是大型的企业级应用,Spring Security都能提供必要的安全保障。

 

001 || SpringSecurity是什么

Spring Security是一个强大的、可定制的身份验证和访问控制框架,它是为基于Java的Spring应用程序设计的安全框架。

它提供了全面的安全服务,包括不限于:

  • 认证(Authentication):确认用户身份,即验证用户提供的凭证(如用户名和密码)是否正确。
  • 授权(Authorization):决定已认证的用户是否有权限执行某些操作或访问特定资源。

Spring Security构建在Spring框架之上,可以轻松集成到任何基于Spring的应用程序中,并且支持多种安全协议和技术,如OAuth2、JWT(JSON Web Tokens)、LDAP等。

 

002 || 作用

【1】保护Web应用:通过配置HTTP请求的安全策略来保护Web应用程序,例如限制对某些URL的访问。

【2】管理用户认证:提供多种方式来处理用户登录,包括表单登录、基本认证、记住我功能等。

【3】实施访问控制:允许开发者定义细粒度的访问规则,以确保只有授权用户才能访问敏感数据或执行关键操作。

【4】防止常见的共计:内置防御机制对抗跨站脚本共计(XSS)、跨站请求伪造(CSRF)、点击劫持(Clickjacking)等常见安全威胁。

【5】支持多样的认证机制:除了传统的用户名/密码认证外,还支持社交登录(如Google、Facebook)、双因素认证等现代认证方式。

 

 

003 || 如何使用

要在Spring Boot项目中使用Spring Security,通常需要完成以下几个步骤:

(1)添加依赖

首先,在pom.xmlbuild.gradle文件中添加Spring Security Starter依赖。以Maven项目为例,则为:

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

(2)配置安全性

可以通过Java配置类或YAML/Properties文件来进行Spring Security相关配置。

下面是一个简单的Java配置示例,它允许匿名访问/hello路径,而其他所有请求都需要认证。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/hello").permitAll() // 允许所有人访问 /hello
                .anyRequest().authenticated()     // 所有其他请求都需要认证
            .and()
            .formLogin();                         // 启用表单登录
        return http.build();
    }
}

(3)创建用户详情服务(可选)

自定义用户存储和服务,比如从数据库加载用户信息,需要实现UserDetailsService接口并覆盖loadUserByUsername方法。然后将这个实现注册为SpringBean

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 根据用户名查找用户实体,并将其转换为Spring Security的UserDetails对象
        return userRepository.findByUsername(username)
                .orElseThrow(() -> new UsernameNotFoundException("User not found"));
    }
}

(4)定义用户和角色(可选)

通过内存中的用户配置快速设置一些测试用户及其角色。这对于开发阶段非常有用:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfiguration {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
            .and()
            .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

(5)自定义登录页面(可选)

默认情况下,Spring Security会提供一个简易的登录页面。如果想要创建自己的登录界面,可以通过覆盖默认的登录路径来实现:

http
    .formLogin()
        .loginPage("/login")  // 指定自定义登录页面的URL
        .permitAll();         // 允许所有人访问登录页面

同时,需要创建相应的HTML模板或者JSP页面用于显示登录表单。

 

 

 

 

 

标签:01,Spring,springframework,SpringSecurity,概述,import,org,security,Security
From: https://www.cnblogs.com/houhuilinblogs/p/18588677

相关文章

  • vs2012 cmake dll工程 调试dll launch.vs.json 附加到进程
    在VisualStudio中,当你有一个DLL项目并且想要附加调试这个DLL时,你需要指定宿主应用程序(在这个例子中是bt.exe),因为DLL本身不是独立可执行的。以下是如何配置launch.vs.json文件以便附加到bt.exe并调试limit-ml-model.dll的步骤:确定宿主应用程序(bt.exe)的路径:你需要知道bt.exe的......
  • 05.数组概述
    Java内存堆​ 存放所有new出来的对象和数组​ 可以被所有的线程共享,不会存放别的对象引用栈​ 存放基本变量类型(会包含这个基本类型的具体数值)​ 引用对象的变量(会存放这个引用在堆里面的具体地址)方法区​ 可以被所有的线程共享​ 包含了所有的class和static变量数......
  • 方法概述
    方法概述​ 方法(method)是程序中最小的执行单元​ 开发中重复的代码,具有独立功能的代码可以抽取到方法中​ 提高代码的复用性,提高代码可维护性注意:方法必须先创建才可以使用,该过程成为方法定义方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用​ ......
  • 农民工人数、本地农民工人数、外出农民工人数、农民工月收入数据集(2010-2022年)
    数据简介:在外出农民工中,跨省流动7061万人,比上年减少69万人,下降1.0%;省内流动10129万人,比上年增加87万人,增长0.9%。从输出地看,中部地区跨省流动农民工占外出农民工的比重为55.6%,西部地区为47.5%,东北地区为31.4%,东部地区为15.0%。  2022年农民工月均收入4615元,比上年增加183......
  • 真题-桂城2017年六年级(答案+题目)
    今天我给大家出一套C++真题-桂城2017年六年级考题限时2.5小时,大家加油!!!题目1:更多闰年题目描述在smoj网站上,有很多针对小学信息学入门的课程,把这些入门课程的题都刷一遍并理解之后,你就算正式的信息学选手啦。例如课程9的某一道题是这样的:输入两个正整数a和b,表......
  • 01-什么是C语言
    01-什么是C语言C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。一、语言人和人交流的语言:汉语、英语、日语、等等。人和计算机交流语言(计......
  • 01-什么是C语言
    一、什么是C语言C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。1、语言人和人交流的语言:汉语、英语、日语、等等。人和计算机交流语言(计......
  • OSG开发笔记(三十七):OSG基于windows平台msvc2017x64编译器官方稳定版本OSG3.4.1搭建环境
    前言  自行编译的osg版本插件比较多,如果对版本没有特定要求,但是对环境编译器有特定要求,可以反向融合编译器符合要求的osg版本。 OSG下载过程  osg官网:http://www.osgchina.org        由于我们不使用osgQt模块,下载了也无所谓,反正不用,这里是osg3.6.4......
  • OpenTelemetry 101:面向 IT 领导者和爱好者的非技术指南
    如果您从事软件开发、SRE或DevOps工作,您可能听说过可观察性、遥测和跟踪等术语。这些概念对于理解应用程序在生产环境中的行为至关重要,并且它们是现代软件开发实践的重要组成部分。您可能还听说过在可观测性方面提到过OpenTelemetry。在本文中,我们将介绍OpenTelemetry101:它是......
  • ABB机器人3HAC036260-001驱动器维修看点
    ABB机器人驱动器是机器人运动控制系统的核心组件之一,负责为机器人提供必要的动力和控制信号,以确保其能够准确、稳定地完成各种工作任务。然而,由于长时间运行、环境因素或操作不当等原因,abb机械臂驱动器3HAC036260-001可能会出现各种故障,影响机器人的正常运行。常见故障及维修方法1......