SpringSecurity 是Spring 全家桶中的安全框架,为了解决“用户身份认证”、“资源访问鉴权”这两个核心问题,SpringSecurity提供了一整套安全框架,基于安全框架,用户可以自定义身份认证、资源鉴权功能,例如:手机验证码登录、基于RDBC鉴权等,本文章主要介绍如何创建基于SpringSecurity项目。
项目源码仓库:Gitee
代码分支:lesson2
基于 SpringBoot 创建SpringSecurity 可以实现开箱即用功能,引入依赖项:
- SpringBoot依赖
org.springframework.boot
spring-boot-starter-parent
2.7.0
- Spring MVC 依赖(搭建基于 http 协议的web项目)
org.springframework.boot
spring-boot-starter-web
- Spring Security 依赖
org.springframework.boot
spring-boot-starter-security
详细 pom 文件可以参见源码:https://gitee.com/hzchendou/spring-security-demo/blob/lesson1/pom.xml
创建简单mvc API,代码如下:
/**
* hello 访问控制器
* @Date: 2022-05-23 11:27
* @since: 1.0
*/
@RequestMapping("/anonymity")
@RestController
public class AnonymityController {
@RequestMapping("/hello")
public ResultVO test() {
return ResultVO.success("hello world");
}
}
自此完成项目配置,基于SpringBoot 自动装配功能可以帮助我们完成大部分配置,引入依赖后会帮助创建一个基础运行框架,配置了一些默认配置项,运行项目后看到如下日志:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.0)
2022-05-23 12:23:13.584 INFO 8538 --- [ main] c.h.b.demo.springsecurity.Application : Starting Application using Java 1.8.0_211 on hzchendoudeMac-mini.local with PID 8538 (/Users/chendou/repo/hzchendou/learning/springsecurity/target/classes started by chendou in /Users/chendou/repo/hzchendou/learning/springsecurity)
2022-05-23 12:23:13.586 INFO 8538 --- [ main] c.h.b.demo.springsecurity.Application : No active profile set, falling back to 1 default profile: "default"
2022-05-23 12:23:14.338 INFO 8538 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-05-23 12:23:14.344 INFO 8538 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-05-23 12:23:14.344 INFO 8538 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.63]
2022-05-23 12:23:14.426 INFO 8538 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-05-23 12:23:14.426 INFO 8538 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 806 ms
2022-05-23 12:23:14.666 WARN 8538 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: ab60d0d9-a34b-4aee-ad31-e8881672c6a0
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2022-05-23 12:23:14.742 INFO 8538 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@20eaeaf8, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@748ac6f3, org.springframework.security.web.context.SecurityContextPersistenceFilter@7affc159, org.springframework.security.web.header.HeaderWriterFilter@72eb6200, org.springframework.security.web.csrf.CsrfFilter@52bf7bf6, org.springframework.security.web.authentication.logout.LogoutFilter@66de00f2, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@163042ea, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@479b5066, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@68f6e55d, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@1d8b0500, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1682c08c, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3fd05b3e, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6fff46bf, org.springframework.security.web.session.SessionManagementFilter@76ececd, org.springframework.security.web.access.ExceptionTranslationFilter@67e25252, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@52b46d52]
2022-05-23 12:23:14.783 INFO 8538 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-05-23 12:23:14.791 INFO 8538 --- [ main] c.h.b.demo.springsecurity.Application : Started Application in 1.471 seconds (JVM running for 1.869)
会生成一串用户密码,这是SpringSecurity 帮助学习的默认配置,后续将会讲解,
启动完成在浏览器输入访问地址:http://localhost:8080/anonymity/hello
网页会自动跳转到 http://localhost:8080/login
输入用户名:user
输入密码:在日志中的一串字符串, 这里是 ab60d0d9-a34b-4aee-ad31-e8881672c6a0(由程序自动生成,每次生成内容不一样)
登录成功后跳转到指定地址,得到内容如下:
{"code":200,"data":"hello world","message":null}
至此完成SpringSecurity项目搭建,SpringSecurity 提供了默认配置,默认组织匿名访问接口。
上述内容帮助完成搭建基础项目,当然这样的程序无法满足实际项目需求,我们需要自定义认证(登录方式)以及 鉴权(权限控制)流程,下一篇我们将在此基础上自定义登录方式,更多文章内容参见:博客
特别声明:项目采用最新SpringSecurity版本:5..7.1,版本升级带来了一点新变化,可能与老版本由一点不同,但是核心理念是一致的