下面是 SpringBoot 基于 SpringSecurity 表单登录和权限验证的完整攻略。
什么是SpringSecurity?
SpringSecurity 是一个基于 Spring 的安全框架,专注于为应用程序提供身份验证和授权。SpringSecurity 提供了一套安全框架,可轻松地将安全性集成到 Spring 应用程序中。
SpringBoot基于SpringSecurity表单登录的示例
下面是一个基于 SpringBoot 和 SpringSecurity 的表单登录示例:
1. 添加 SpringSecurity 依赖
首先,在 pom.xml 文件中添加以下 SpringSecurity 依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 创建登录页面
在 SpringBoot 的 webapp 目录下创建 login.html 文件(示例如下):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<h1>登录</h1>
<form action="/login" method="post">
<label>
用户名:
<input type="text" name="username"/>
</label>
<br/>
<label>
密码:
<input type="password" name="password"/>
</label>
<br/>
<button type="submit">登录</button>
</form>
</body>
</html>
3. 创建安全配置
在 SpringBoot 应用程序的 src/main/java 目录下创建 WebSecurityConfig 类,该类用于配置 SpringSecurity。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
该示例中的 configureGlobal() 方法配置了一个用户名为“user”,密码为“password”,角色为“USER”的用户,用于测试用例。在 configure(HttpSecurity http) 方法中,我们使用了 antMatchers() 方法来配置哪些页面可以公开访问,配置了登录页面路径和登出路径。此外,我们还需要覆盖默认的登录页面。注意,{noop}
前缀是在 Spring Security 5.0中引入的,表示清除密码的任何编码。
4. 运行示例
现在,您已经创建了一个基于 SpringBoot 和 SpringSecurity 的简单表单登录示例。运行该示例,访问 http://localhost:8080/login 即可看到登录页面。在登录页面中输入用户名和密码,单击“登录”按钮即可登录。
SpringBoot基于SpringSecurity的权限验证示例
下面是一个基于 SpringBoot 和 SpringSecurity 的权限验证示例:
1. 添加依赖
首先,需要添加 SpringSecurity 依赖项,如示例 1 中所述。
2. 创建安全配置
对于这个示例,我们需要在 WebSecurityConfig 类中添加一些额外的配置。我们添加了一个名为“ADMIN”的角色,来控制 ADMIN 用户访问受保护的资源。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER")
.and()
.withUser("admin").password("{noop}password").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
在上述代码中,我们使用了 hasRole() 方法来控制 ADMIN 用户的权限。我们还使用了 antMatchers() 方法来要求 ADMIN 用户才能访问受保护的资源。
3. 创建受保护的页面
我们需要创建一个受保护的页面,使 ADMIN 用户能够访问该页面。在 SpringBoot 的 webapp 目录下创建 admin.jsp 文件(示例如下):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>管理员页面</title>
</head>
<body>
<h1>欢迎来到管理员页面,[admin]!</h1>
</body>
</html>
4. 运行示例
现在,您已经创建了一个基于 SpringBoot 和 SpringSecurity 的权限验证示例。运行该示例,访问 http://localhost:8080/login 即可看到登录页面。使用管理员帐户登录,就可以访问受保护的页面了。
这两个示例展示了 SpringBoot 如何使用 SpringSecurity 实现表单登录和基于角色的权限控制。在实际项目中,您可以根据需要修改这些示例,以便更好地适应您的需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot基于SpringSecurity表单登录和权限验证的示例 - Python技术站