活动地址:优快云21天学习挑战赛
概述
目前,在 Java web
开发中,安全框架常用的一般有 SpringSecurity
和 Shiro
:
-
SpringSecurity
特点:- 和
Spring
无缝整合 - 全面且完善的权限控制(包括微服务的权限控制)
- 专门为
web
开发而设计- 旧版本不能脱离
web
环境使用 - 新版本对整个框架进行了分层抽取,分为了
core
模块和web
模块。单独引入core
模块
- 旧版本不能脱离
- 功能完善,重量级
- 和
-
Shiro
特点:- 轻量级,
Shiro
主张的理念是把复杂的事情变简单。针对对性能有更高要求的互联网应用有更好的表现 - 通用性
- 好处:不局限于
web
环境,可以脱离web
环境使用 - 缺陷:在
web
环境下一些特定的需求需要手动编写代码定制
- 好处:不局限于
- 轻量级,
基于我们开发中绝大部分情况下都是使用
Spring
框架,且对性能要求没有很高,所以我们一般选择SpringSecurity
框架,毕竟Spring 出品,必属精品
。
牛刀小试
SpringSecurity
是一个安全框架,前身是 Acegi Security
,能够为 Spring
企业应用系统提供声明式的安全访问控制。Spring Security
基于 Servlet
过滤器
、IoC
和 AOP
,为 Web
请求和方法调用提供身份验证和授权处理,避免了代码耦合,减少了大量重复代码工作。
- 首先我们新建一个
SpringBoot
项目,并且提供一个hello
接口:
@RestController
public class HelloController {
@GetMapping("hello")
public String hello() {
return "hello spring security";
}
}
启动项目后,访问接口:
SpringBoot
为我们提供了集成SpringSecurity
的starter
:
这里使用
SpringBoot
2.3.12.RELEASE
版本,对应Security
5.3.9.RELEASE
版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
并且 SpringBoot
已经为 SpringSecurity
提供了默认配置,默认所有资源(包括静态资源)都必须认证通过才能访问。此时再访问 hello
接口,会跳转默认的登录页面:
这里 SpringBoot
为我们提供了默认的用户名:user
,密码为随机生成在控制台:
输入正确的用户名密码,认证通过后就可以继续访问了:
总结
可能第一次使用 SpringSecurity
的朋友们都会有下面这些疑惑:
- 为什么什么都没配置就会跳转到登录页面呢?
- 登录页面哪里来的?
- 能不能自定义登录页面?
- 默认的用户名密码在哪里配置的?
在之后的 SpringSecurity 学习 专栏中,我们一起来揭开 Spring Security
神秘的面纱。