springboot整合springsecurity
时间: 2023-08-29 19:12:20 浏览: 104
springboot整合springSecurity
Spring Security 是 Spring 生态系统中非常受欢迎的安全框架,它提供了许多安全特性,如身份验证、授权、攻击防护等。Spring Boot 是 Spring 框架的一个扩展,可以帮助我们快速搭建 Spring 应用程序。在这里,我将介绍如何整合 Spring Boot 和 Spring Security。
首先,在 pom.xml 文件中添加以下依赖:
```xml
<dependencies>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Security Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
```
然后,在应用程序主类上添加 @EnableWebSecurity 注解,这个注解会自动配置 Spring Security:
```java
@SpringBootApplication
@EnableWebSecurity
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
```
接下来,创建一个继承自 WebSecurityConfigurerAdapter 的配置类,覆盖默认的 Spring Security 配置:
```java
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER")
.and()
.withUser("admin").password("{noop}password").roles("USER", "ADMIN");
}
}
```
这个配置类定义了两个方法 configure(HttpSecurity http) 和 configure(AuthenticationManagerBuilder auth)。configure(HttpSecurity http) 方法定义了应用程序的安全规则,比如所有请求都需要身份验证,登录页面为 /login,注销页面为 /logout;configure(AuthenticationManagerBuilder auth) 方法定义了用户身份验证方式,这里我们使用了一个内存中的用户存储来进行身份验证。
最后,我们可以在控制器中添加一个 /login 的请求处理方法,用于显示登录页面:
```java
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
}
```
这个方法返回一个名为 login 的视图,我们可以在 resources/templates 目录下创建 login.html 页面来显示登录表单。
到此为止,Spring Boot 和 Spring Security 的整合已经完成了,我们可以启动应用程序并访问 http://localhost:8080/login 来测试登录页面了。
阅读全文