活动地址:CSDN21天学习挑战赛
概述
目前,在 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:
这里使用
SpringBoot2.3.12.RELEASE版本,对应Security5.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 神秘的面纱。
版权声明:本文为qiaohao0206原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。