下面是 Spring Security 将用户数据存入数据库的完整攻略:
1. 添加相关依赖
在 pom.xml 文件中增加以下 Spring Security 相关依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>{{spring-security-version}}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>{{spring-security-version}}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-data</artifactId>
<version>{{spring-security-version}}</version>
</dependency>
其中 {{spring-security-version}}
根据实际情况填写 Spring Security 版本号。
2. 创建数据库表
创建用于存储用户数据的数据库表,以下是一个示例:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`enabled` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 配置 Spring Security
在 Spring Security 的配置类中,使用 UserDetailsService
对象加载用户信息,并使用 PasswordEncoder
对象加密密码。
以下是一个示例:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 使用 JDBC 加载用户信息
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select username, password, enabled from user where username=?")
.authoritiesByUsernameQuery("select username, 'ROLE_USER' from user where username=?")
.passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
// 使用 BCrypt 加密密码
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置安全策略
http.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
}
其中 dataSource
为数据库连接池,需要在 Spring 中进行配置。passwordEncoder
对象使用 BCrypt 算法对密码进行加密。
4. 使用 Thymeleaf 显示用户信息
在页面上显示用户信息,以下是一个示例:
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Security Example</title>
</head>
<body>
<div th:if="${#authentication.isAuthenticated()}">
<p>Hello, <span th:text="${#authentication.name}"></span>!</p>
<form th:action="@{/logout}" method="post">
<input type="submit" value="Sign out"/>
</form>
</div>
<div th:unless="${#authentication.isAuthenticated()}">
<p>You are not logged in.</p>
<form th:action="@{/login}" method="post">
<div>
<label for="username">Username:</label>
<input type="text" name="username" id="username"/>
</div>
<div>
<label for="password">Password:</label>
<input type="password" name="password" id="password"/>
</div>
<input type="submit" value="Sign in"/>
</form>
</div>
</body>
</html>
在页面中通过 Thymeleaf 的 #authentication
表达式获取用户信息,并根据登录状态显示不同的内容。
以上就是 Spring Security 将用户数据存入数据库的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Security 将用户数据存入数据库 - Python技术站