视频链接:SpringSecurity框架教程
文章源码:https://github.com/geyiwei-suzhou/spring-security
前置知识
- Spring
- Spring Boot
- Java WEB
Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)
用户认证:系统认为用户是否能登录
用户授权:系统判断用户是否有权限去做某些事情
Spring Security 对比 Shiro
Spring Security | Shiro |
---|---|
和Spring无缝整合 | - |
全面的权限控制 | - |
专门为web开发而设计 | 通用性 |
重量级 | 轻量级 |
- Spring Security 专门为web开发而设计:
旧版本不能脱离Web环境使用
新版本对整个框架进行了分层抽取,分成了核心模块和Web模块。单独引入核心模块就可以脱离Web环境 - Shiro通用性:
好处:不局限于Web环境,可以脱离Web环境使用
缺陷:在Web环境下一些特定的需求需要手动编写代码定制
Spring Security是Spring家族中的一个安全管理框架,实际上,在Spring Boot出现之前,Spring Security就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是Shiro的天下。相对于Shiro,在SSM中整合Spring Security都是比较麻烦的操作,所以,Spring Security虽然功能比Shiro强大,但是使用反而没有Shiro多(Shiro虽然功能没有Spring Security多,但是对于大部分项目而言,Shiro也够用了)。自从有了Spring Boot之后,Spring Boot对于Spring Security提供了自动化配置方案,可以使用更少的配置来使用Spring Security。
一般来说,常用的安全管理技术栈的组合是:
- SSM + Shiro
- Spring Boot / SpringCloud + Spring Security
Spring Security(5.3.8.RELEASE) 模块
- Core — spring-security-core.jar
- Remoting — spring-security-remoting.jar
- Web — spring-security-web.jar
- Config — spring-security-config.jar
- LDAP — spring-security-ldap.jar
- OAuth 2.0 Core — spring-security-oauth2-core.jar
- OAuth 2.0 Client — spring-security-oauth2-client.jar
- OAuth 2.0 JOSE — spring-security-oauth2-jose.jar
- OAuth 2.0 Resource Server — spring-security-oauth2-resource-server.jar
- ACL — spring-security-acl.jar
- CAS — spring-security-cas.jar
- OpenID — spring-security-openid.jar
- Test — spring-security-test.jar
入门案例
创建SpringBoot工程
引入相关依赖
pom文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
修改配置文件
修改application.properties文件,添加如下内容将默认启动端口改为8111
server.port=8111
添加测试接口
新建类:com.antherd.securitydemo.controller.TestController
package com.antherd.securitydemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/hello")
public String add() {
return "hello security";
}
}
启动测试
启动项目,项目启动时会生成默认密码
默认用户
为:user
访问:http://localhost:8111/test/hello,由于未登陆,Spring Security 会将页面自动跳转到登陆页面http://localhost:8111/login
输入默认用户
及默认密码
,登陆成功后自动跳转到之前访问页面 http://localhost:8111/test/hello