Spring Security入门
前言
公众号 《java编程手记》记录JAVA学习日常,分享学习路上点点滴滴,从入门到放弃,欢迎关注
Spring Security 是一套基于Spring框架,旨在为基于javaEE的企业应用程序提供一个全面的解决方案。Spring Security在web方面的应用主要依赖于Servlet的Filter机制,通过组装一系列的FilterChain达到web会话请求的校验认证授权等一系列操作
image-20210405202153117入门Demo
引入POM依赖
本次使用SpringBoot+SpringSecurity进行Demo实现,SpringBoot
版本为2.4.4
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.uiaoo.study</groupId>
<artifactId>study-security</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>study-security</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
重写WebSecurityConfigurerAdapter
WebSecurityConfigurerAdapter
是SpringSecurity在web场景的一个重要实现类,本文不做讨论,待后续文章专门分析该类实现。
引入JAR以后需要重写WebSecurityConfigurerAdapter
对象的configure
方法,方法签名如下,入参为HttpSecurity
,configure
方法主要使用ant风格对请求路径的url进行规则权限配置,登录相关信息配置,登录相关信息配置,匿名登录相关信息配置等等,是SpringSecurity实现自定义的重要扩展点,这里做一个简单地实现控制
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin().and().authorizeRequests().antMatchers("/index").authenticated().anyRequest().permitAll();
}
如上表示,使用form表单登录
验证,并且针对访问/index
的路径必须登录,其他路径则放行通过,不做任何权限校验
启动项目
实现index
路径请求,返回index
字符串
@SpringBootApplication
@RestController
public class StudySecurityApplication {
public static void main(String[] args) {
SpringApplication.run(StudySecurityApplication.class, args);
}
@GetMapping("/index")
public Object index(){
return "index";
}
}
image-20210405203143869
默认Spring Security
会为默认用户user
随机生成一个用户密码`,并打印在控制台中
随便访问一个链接,默认会提示页面不存在404
,但是不会有任何权限登录校验拦截
访问有权限校验的index
页面时会被重定向到则会跳转到Spring Security的默认登录页面/login
通过账户 user
以及控制台生成的密码a0aa9c06-28dd-408f-8801-2571a08409aa
进行登录,登录成功会跳转到原有的index
页面
至此已经初步完成了Spring Security的简单demo,我们加入了SpringBoot
和SpringSecurityStarter
的依赖,重写了WebSecurityConfigurerAdapter
的configure
实现,并且进行了一些简单场景的校验,下一篇主要重点实现基于DB的权限控制