Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shiro相比,它的功能更为强大,并且Shiro其实存在反编译漏洞,可能带来一定安全隐患。
Spring Security还可以轻松的自定义扩展以满足各种需求,对常见的Web安全攻击提供了防护支持。如果你的Web框架选择的是Spring Boot,那么在安全方面Spring Security会是一个不错的选择。因为Spring Boot使用了特定的方式来进行配置,从而使开发人员不再需要定义繁琐的XML配置文件,使用对应注解就可以管理对象的生命周期。
一般来说,常见的安全管理技术栈的组合是这样的:
SSM + Shiro
Spring Boot/Spring Cloud + Spring Security
我们来看下具体使用。
1.创建项目
在 Spring Boot 中使用 Spring Security 非常容易,引入依赖即可:
pom.xml 中的 Spring Security 依赖:
<parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.4.0version> <relativePath/> parent><dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-securityartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency>dependencies>
只要加入依赖,项目的所有接口都会被自动保护起来。
2.启动项目
我们创建一个 HelloController:
@RestControllerpublic class HelloController {
@GetMapping("hello") public String hello() {
return "hello"; }}
访问 localhost:8080/hello
,被重定向到localhost:8080/login
,必须登录之后才能访问。
当用户从浏览器发送请求访问服务器地址(localhost:8080/)时,服务端会返回 302
响应码,让客户端重定向到 /login
页面,用户在 /login
页面登录,登陆成功之后,就会自动跳转到 /hello
接口。
默认情况下,登录的用户名是 user
,密码则是项目启动时随机生成的字符串,可以从启动的控制台日志中看到默认密码: