springboot实现登录
时间: 2023-08-29 10:05:36 浏览: 91
Spring Boot 可以通过整合 Spring Security 实现登录功能,具体步骤如下:
1. 引入 Spring Security 依赖,例如:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 创建一个实现了 UserDetailsService 接口的类,用于加载用户信息和授权信息,例如:
```java
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
// 加载用户信息的方法
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 可以根据 username 查询数据库获取用户信息
// 如果用户不存在,可以抛出 UsernameNotFoundException 异常
// 如果用户被锁定,可以抛出 LockedException 异常
// 如果用户被禁用,可以抛出 DisabledException 异常
// ……
return new User(username, "password", new ArrayList<>());
}
// 加载授权信息的方法
public void loadAuthoritiesByUsername(String username) {
// 可以根据 username 查询数据库获取用户的授权信息
}
}
```
3. 配置 Spring Security,例如:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/login", "/logout").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/home")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
}
```
在上述代码中,我们通过 `@Autowired` 注入了 `UserDetailsServiceImpl`,并在 `configure(AuthenticationManagerBuilder auth)` 方法中将其配置为认证管理器的用户详情服务。
在 `configure(HttpSecurity http)` 方法中,我们配置了一些安全策略:
- `/`、`/login` 和 `/logout` 路径的请求允许匿名访问;
- 其他路径需要进行认证;
- 使用表单登录,登录页面为 `/login`,登录成功后跳转到 `/home`;
- 允许注销登录。
4. 在视图层中添加登录页面和控制器。
例如,在 `HomeController` 中添加如下方法:
```java
@Controller
public class HomeController {
@GetMapping("/login")
public String showLoginForm() {
return "login";
}
@GetMapping("/home")
public String showHomePage() {
return "home";
}
}
```
在视图层中,我们需要添加一个表单页面 `login.html`,例如:
```html
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<form method="post" action="/login">
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password" />
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
</body>
</html>
```
这样,在运行应用程序时,当我们访问 `/home` 时,会自动跳转到登录页面,输入正确的用户名和密码后即可登录成功。
阅读全文