Spring Security基础使用

一、前言

Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shiro相比,它拥有更为强大的功能。Spring Security也可以轻松的自定义扩展以满足各种需求,并且对常见的Web安全攻击提供了防护支持。如果你的Web框架选择的是Spring,那么在安全方面Spring Security会是一个不错的选择。

二、开启Spring Security

这里我们使用Spring Boot来集成Spring Security。

2.1 引入依赖

创建一个Spring Boot项目,然后引入spring-boot-starter-security:

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2.2 测试

接下来我们创建一个TestController,对外提供一个/hello服务

java 复制代码
@RestController
public class TestController {
    @GetMapping("hello")
    public String hello() {
        return "hello spring security";
    }
}

这时候我们直接启动项目,访问http://localhost:8080/hello,可看到HTTP Basic认证:

当Spring项目中引入了Spring Security依赖的时候,项目会默认开启如下配置:

yml 复制代码
security:
  basic:
    enabled: true

这个配置开启了一个HTTP basic类型的认证,所有服务的访问都必须先过这个认证,默认的用户名为user,密码由Sping Security自动生成,回到IDE的控制台,可以找到密码信息:

输入用户名user,密码744294ad-5717-4f0b-8932-d26d2e455711后,我们便可以成功访问/hello接口。

三、基于HTTP Basic认证

我们可以通过一些配置将基于表单认证修改为HTTP Basic的认证方式。

创建一个配置类BrowserSecurityConfig继承org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter这个抽象类并重写configure(HttpSecurity http)方法。WebSecurityConfigurerAdapter是由Spring Security提供的Web应用安全配置的适配器:

java 复制代码
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //http.formLogin() // 表单方式
        http.httpBasic() // HTTP Basic方式
                .and()
                .authorizeRequests() // 授权配置
                .anyRequest()  // 所有请求
                .authenticated(); // 都需要认证
    }
}

Spring Security提供了这种链式的方法调用。上面配置指定了认证方式为表单登录,并且所有请求都需要进行认证。这时候我们重启项目,再次访问Mhttp://localhost:8080/hello>,可以看到认证方式已经是HTTP Basic的方式了:

相关推荐
Go_error1 小时前
那个让我们损失了 47,000 美元 AWS 账单的互斥锁错误
后端
Go_error1 小时前
接口何时冗余:一种用于 Go 测试的精简依赖注入方法
后端
鱼弦1 小时前
长尾场景的挑战:大模型如何处理极其冷门的知识?
后端
孙启超1 小时前
【AI开发之Rust】第 8 课:泛型、trait 与 trait 对象
开发语言·后端·rust
co松柏1 小时前
一文吃透 Pi:10w stars 的极简 Agent harness
后端·架构
joinwell521 小时前
没收到回复,再点一次会启动两个 AI 吗?
人工智能·后端
苏三说技术1 小时前
JDK27正式发布,人麻了!
后端
小蒜学长2 小时前
基于RFID技术的仓储管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端·rfid技术·仓储管理
梦影_2 小时前
Langchain简单快速上手教程(五)——聊天模型之流式传输
java·数据库·人工智能·python·langchain