springboot系列21: SpringSecurity初体验
Spring Security是啥?
SpringSecurity是基于Spring AOP和Servlet过滤器的安全框架。它提供全面的安全性解决方案,同时在Web 请求级和方法调用级处理身份确认和授权。在 Spring Framework 基础上,Spring Security 充分利用了依赖注入(DI,Dependency Injection)和面向切面编程(AOP)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和授权支持。它与Spring MVC有很好地集成,并配备了流行的安全算法实现捆绑在一起。安全主要包括两个操作“认证”与“验证”(有时候也会叫做权限控制)。--引用网络。
从这段话可以看出SpringSecurity是一个安全框架,具有认证和验证功能,我知道还有一种安全框架:Apache Shiro,他们的区别在哪呢?
相同点:
(1)认证功能(2)授权功能(3)加密功能(4)会话功能(5)缓存支持(6)remeberMe功能不同点:(1)Shiro依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security依赖Spring容器。(2)Shiro的配置和使用比较简单,Spring Security上手复杂些。
好了,下面就开始在springboot项目中搭建Security,搞起。首先还是老规矩,pom文件引入jar
<dependencies> <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> </dependencies>
下面写一个请求资源如下:
/** * @version 1.0 * @description: 请求资源 * @date 2020-09-17 21:44 */ @RestController public class HelloController { @GetMapping("/hello") public String getHello() { return "Hello,Spring Security"; } }
浏览器访问结果如下,是不是很意外^V^
在启动控制台有这么一段日志,其实SpringSecurity 默认用户名user,密码就是日志控制台的密码:
Using generated security password: 985f338c-c938-4fd1-a759-db16058f8221
输入用户名或密码就可以访问资源了。
有小伙伴问了,那能不能关闭验证功能呢?有的,就是在启动类排除SecurityAutoConfiguration
/** * @version 1.0 * @description: Spring-Security初体验 * @date 2020-09-17 21:43 */ @SpringBootApplication(exclude= SecurityAutoConfiguration.class) public class SecurityApplication { public static void main(String[] args) { SpringApplication.run(SecurityApplication.class, args); } }
那又有小伙伴会问了,能不能修改登录的默认账户和密码呢?可以的呀,在配置application.properties 文件中添加spring.security.user.name、spring.security.user.password 配置即可。
spring.security.user.name = admin spring.security.user.password = 123456