下面我将为你详细介绍 SpringBoot security 安全认证登录的实现方法,包括登陆拦截、用户角色授权、自定义登录页面、注销等功能的实现方法。
1. 导入 SpringBoot Security 依赖
在 pom.xml 文件中加入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
该依赖包含了 Spring Security 的基本依赖。
2. 配置 Spring Security
创建名为 SecurityConfig 的 Java 类,并使用 @EnableWebSecurity
注解开启 Spring Security,代码如下:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 配置用户角色授权
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN") // 只有ADMIN角色可以访问/admin/**
.antMatchers("/user/**").hasAnyRole("USER", "ADMIN") // 只有USER和ADMIN角色可以访问/user/**
.antMatchers("/**").permitAll() // 所有人都可以访问其它路径
.and()
.formLogin()
.loginPage("/login") // 自定义登录页的路径
.defaultSuccessUrl("/index") // 登录成功后跳转的路径
.permitAll()
.and()
.logout()
.logoutUrl("/logout") // 自定义注销路的径
.logoutSuccessUrl("/login") // 注销成功后跳转的路径
.permitAll()
.and()
.httpBasic();
}
// 配置自定义的用户账号密码和角色
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("{noop}admin").roles("ADMIN")
.and()
.withUser("user").password("{noop}user").roles("USER");
}
// 配置密码加密方式
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
该方法中,我们配置了用户角色授权、自定义登录页面的路径、注销等功能,以及密码加密方式。
3. 创建自定义登录页面
在 resources 目录下创建名为 login.html 的 HTML 文件,用于自定义登录页面界面,并且需要为表单设置提交路径,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form method="post" action="/login">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required autofocus /><br /><br />
<label for="password">Password:</label>
<input type="password" id="password" name="password" required /><br /><br />
<button type="submit">Log in</button>
</form>
</body>
</html>
4. 创建 Controller
创建名为 IndexController 的 Java 类,用于控制页面跳转,代码如下:
@Controller
public class IndexController {
@GetMapping("/")
public String index() {
return "index";
}
@GetMapping("/admin")
public String admin() {
return "admin";
}
@GetMapping("/user")
public String user() {
return "user";
}
@GetMapping("/login")
public String login() {
return "login";
}
}
在该类中,我们创建了用于跳转到首页、管理员界面和普通用户界面的方法,以及用于跳转到自定义登录页面的方法。
5. 运行测试
我们现在可以运行测试来验证 Spring Security 的配置是否成功。在浏览器中输入 http://localhost:8080/
,将会跳转到首页;输入 http://localhost:8080/admin
,将会跳转到管理员页面,输入 http://localhost:8080/user
,将会跳转到普通用户界面。如果访问受限页面时未成功登录,则会自动跳转到自定义登录页面,输入用户名和密码即可登录。
附:示例代码
示例代码可参考下方 Github 链接:
https://github.com/jinwuzhao/springboot-security-demo。
这里提供了一个简单的 Spring Boot 项目,其中包含了上述实现方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot security安全认证登录的实现方法 - Python技术站