Spring Security的简单介绍与案例

简介: # 引言Spring Security是一个功能强大的安全框架,旨在为Java应用程序提供身份验证和授权功能。它可以很容易地整合到Spring应用程序中,并支持多种身份验证方法,包括基于表单的身份验证、基于HTTP的身份验证以及基于OAuth 2.0的身份验证。# 依赖```<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>```# 第一个例子要在Spring应用

引言

Spring Security是一个功能强大的安全框架,旨在为Java应用程序提供身份验证和授权功能。它可以很容易地整合到Spring应用程序中,并支持多种身份验证方法,包括基于表单的身份验证、基于HTTP的身份验证以及基于OAuth 2.0的身份验证。

依赖

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

第一个例子

要在Spring应用程序中使用Spring Security,首先需要在项目中添加Spring Security的依赖。

然后,可以使用@EnableWebSecurity注解启用Web安全性,并通过编写WebSecurityConfigurer接口的实现来配置安全规则。例如,可以使用以下代码配置基于表单的身份验证:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .formLogin()
            .loginPage("/login")
            .permitAll();
    }
}

在这段代码中,我们启用了基于表单的身份验证,并指定了登录页面的URL。这意味着用户在访问受保护的资源时,会被重定向到登录页面,并在登录成功后才能访问这些资源。

Spring Security还提供了其他一些有用的功能,例如用户角色和权限的管理、密码加密以及安全传输。使用Spring Security可以很容易地为应用程序提供强大的安全的检查。

拦截后与登录

我们在拦截请求后如果不指定会默认跳到一个# Spring Security提供的登陆界面

我们输入账号user

同时在控制台中找到生成的密码,即可完成登录。

一个小demo

package com.example.demospringsecurity;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Bean
    PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }


    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("lyy")
                .password("123456").roles("admin", "user")
                .and()
                .withUser("security")
                .password("security").roles("user");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()  //开启配置
                .antMatchers("/cxyxj/**").hasRole("admin")   //访问/cxyxj/**下的路径,必须具备admin身份
                .antMatchers("/security/**").hasRole("user") //访问/security/**下的路径,必须具备user身份
                .antMatchers("/permitAll").permitAll() // 访问/permitAll路径,不需要登录
                .anyRequest() //其他请求
                .authenticated()//验证   表示其他请求只需要登录就能访问
                .and()
                .formLogin() // 开启表单登陆
                .loginPage("自定义的拦截后跳转的界面");
    }

    @Bean
    @Override
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManagerBean();
    }
}

上面的demo中,我们重写了一些方法,并为其添加了如Configuration,Bean的注解。

我们完成了自定义页面的跳转和自定义密码,并且为一些页面设置了需要鉴别的权限。

最后

在使用Spring Security时,还可以使用许多其他功能来提高应用程序的安全性。例如,可以使用Spring Security的内置加密功能对用户密码进行加密。这样,即使在数据库被黑客入侵的情况下,用户的密码也无法被直接读取。

此外,还可以使用Spring Security的访问控制功能,根据用户角色或权限来控制对应用程序资源的访问。例如,可以设置某些资源仅对管理员可见,而对普通用户隐藏。

此外,Spring Security还提供了许多其他安全功能,例如安全传输、跨站请求伪造保护以及身份验证和授权的扩展功能。使用这些功能,可以构建出更加安全的应用程序。

总的来说,Spring Security是一个功能强大的安全框架,可以为Java应用程序提供身份验证和授权功能,同时还提供了许多其他安全功能。使用Spring Security可以很容易地构建出安全的应用程序。

相关文章
|
3天前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
21 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
6天前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
31 2
Spring Security 6.x OAuth2登录认证源码分析
|
10天前
|
安全 Java 数据安全/隐私保护
Spring Security 6.x 一文快速搞懂配置原理
本文主要对整个Spring Security配置过程做一定的剖析,希望可以对学习Spring Sercurity框架的同学所有帮助。
40 5
Spring Security 6.x 一文快速搞懂配置原理
|
7天前
|
安全 Java API
Spring Security 6.x 图解身份认证的架构设计
【6月更文挑战第1天】本文主要介绍了Spring Security在身份认证方面的架构设计,以及主要业务流程,及核心代码的实现
16 1
Spring Security 6.x 图解身份认证的架构设计
|
7天前
|
安全 前端开发 Java
CSRF 攻击以及如何使用 Spring Security 预防攻击
【6月更文挑战第15天】CSRF 是指跨站请求伪造,是 Cross-site request forgery 的简称,有些地方也简写为 XSRF。
348 1
|
9天前
|
安全 前端开发 Java
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
上一篇主要介绍了Spring Secuirty中的过滤器链SecurityFilterChain是如何配置的,那么在配置完成之后,SecurityFilterChain是如何在应用程序中调用各个Filter,从而起到安全防护的作用,本文主要围绕SecurityFilterChain的工作原理做详细的介绍。
44 0
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
|
1天前
|
安全 NoSQL Java
记录spring security执行流程
Spring Security登录授权流程简述: 1. 实现UserDetailsService,从DB加载用户信息。 2. 创建UserDetails实现类,封装用户详情。 3. 配置WebSecurityConfigurerAdapter,用BCryptPasswordEncoder加密。 4. 设定登录接口为匿名访问。 5. 注入AuthenticationManager,用其authenticate方法认证用户
|
2天前
|
消息中间件 Java Spring
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
JavaWeb后端开发Spring框架之消息 消息队列案例--订单短信通知
10 0
|
5天前
|
存储 安全 Java
spring security原理-学习笔记1-整体概览
spring security原理-学习笔记1-整体概览
|
6天前
|
缓存 安全 Java
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)