java实现登录功能 springboot 基于session
时间: 2024-10-01 07:06:42 浏览: 33
basic-logic.rar
在Spring Boot中实现基于Session的用户登录功能通常涉及以下几个步骤:
1. **配置WebApplicationContext**:
首先,在Spring Boot应用中启用Web支持,添加`spring-boot-starter-web`依赖。在`application.properties`或`application.yml`文件中配置端口、Spring MVC等。
2. **创建Controller**:
创建一个控制层类,比如`LoginController`,它会处理用户的登录请求。在这个类里,你可以设置一个`@PostMapping`方法,接收用户名和密码,并验证它们。
```java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
// 这里假设有一个UserService或AuthenticationService来验证用户
boolean isAuthenticated = userService.authenticate(username, password);
if (isAuthenticated) {
// 登录成功,设置会话属性(如username)
SecurityContextHolder.getContext().setAuthentication(authentication);
return "redirect:/dashboard";
} else {
// 登录失败,返回错误页面
return "error";
}
}
}
```
3. **设置会话**:
Spring Security自动管理HttpSession,你需要在配置类(如`SecurityConfig`)中启用`http.session`相关的属性,例如设置默认有效期。
4. **检查权限**:
使用`@PreAuthorize`注解或`@Secured`注解可以保护需要认证的URL。如果用户未登录,他们将被重定向到登录页。
5. **登录状态跟踪**:
通过`SecurityContext`可以访问当前用户的信息,例如在每个请求开始时检查用户是否已经登录。
```java
@GetMapping("/dashboard")
public String dashboard() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth == null) {
return "redirect:/login";
}
String username = auth.getName(); // 获取用户名
// 从这里开始,你可以显示受限内容
return "dashboard";
}
```
6. **清理Session**:
当用户登出时,可以在控制器中清除`SecurityContextHolder`中的认证信息并删除对应会话。
```java
@ExceptionHandler(UserNotFoundException.class)
public String logoutHandler() {
SecurityContextHolder.clearContext();
return "redirect:/login";
}
```
阅读全文