下面我给您详细讲解一下“Spring Security自定义登录页面认证过程常用配置”的完整攻略,希望对您有所帮助。
一、Spring Security 自定义登录页
1.1 配置Spring Security
首先要配置 Spring Security,添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
然后在 application.properties
中设置用户名和密码:
spring.security.user.name=user
spring.security.user.password=password
这里的用户名和密码设置为 user 和 password,当然也可以换成自己喜欢的用户名和密码。
1.2 创建登录页面
我们可以使用模板引擎 Thymeleaf,创建一个登录页面。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>请登录</h1>
<form th:action="@{/login}" method="post">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" name="username"/>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" name="password"/>
</div>
<button type="submit">登录</button>
</form>
</body>
</html>
以上代码创建了一个登录页面,用户需要输入用户名和密码,点击登录按钮之后将会向后端发送一个 POST 请求,请求 URL 为 /login
。
注意:这里的 @{/login}
表示使用 Thymeleaf 的 URL 模板自动根据当前环境设置合适的 URL 前缀,具体可参考 Thymeleaf 官网的文档。
1.3 配置登录页面
在 Spring Security 中,登录页面的默认 URL 是 /login
,如果我们想要使用自定义的登录页面,可以通过配置 WebSecurityConfigurerAdapter
类来实现。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/index").permitAll()
.antMatchers("/user/**").hasRole("USER")
.and()
.formLogin()
.loginPage("/login") // 自定义登录页面的 URL
.defaultSuccessUrl("/user") // 登录成功后的默认跳转页面
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/index") // 注销成功后跳转到首页
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
以上代码实现了自定义登录页面,WebSecurityConfig
继承自 WebSecurityConfigurerAdapter
,并在 configure(HttpSecurity http)
方法中进行了配置。
其中,.loginPage("/login")
配置了自定义登录页面的 URL,.defaultSuccessUrl("/user")
配置了登录成功后的默认跳转页面。
1.4 验证登录页面
最后,我们启动应用,访问 http://localhost:8080/login,可以看到自定义的登录页面。输入用户名和密码,点击登录,会根据用户名和密码进行认证,如果认证成功,会跳转到 /user
页面。
二、使用数据库验证用户
2.1 配置数据库
使用数据库验证用户,我们需要在数据库中创建一张用户表,用来存储用户的账号和密码信息。
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
在用户表中,我创建了一个用户名为 admin,密码为 password。
INSERT INTO `users` (`id`, `username`, `password`) VALUES (1, 'admin', 'password');
2.2 配置数据库连接信息
还需要在 application.properties
中添加数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
这里使用了 MySQL 数据库连接信息作为示例,您需要根据自己的实际情况修改。
2.3 配置 Spring Security
在 WebSecurityConfigurerAdapter
中配置数据库相关信息,以及自定义登录页面和认证过程。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select username,password,true from users where username = ?")
.authoritiesByUsernameQuery("select username, 'ROLE_USER' from users where username = ?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/index").permitAll()
.antMatchers("/user/**").hasRole("USER")
.and()
.formLogin()
.loginPage("/login") // 自定义登录页面的 URL
.defaultSuccessUrl("/user") // 登录成功后的默认跳转页面
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/index") // 注销成功后跳转到首页
.permitAll();
}
}
其中,.jdbcAuthentication().dataSource(dataSource)
表示使用数据源进行认证。
usersByUsernameQuery
表示查询用户的 SQL 语句,其中 ?
表示用户名。
authoritiesByUsernameQuery
表示查询用户权限的 SQL 语句。
2.4 验证登录页面
最后,我们启动应用,访问 http://localhost:8080/login,可以看到自定义的登录页面。输入用户名和密码,点击登录,会根据数据库中的用户信息进行认证,如果认证成功,会跳转到 /user
页面。
以上就是自定义登录页面的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Security自定义登录页面认证过程常用配置 - Python技术站