写一个springboot登录页面并实现登录拦截器
时间: 2023-05-19 19:06:37 浏览: 68
好的,我可以回答这个问题。以下是一个简单的Spring Boot登录页面的示例代码:
```java
@Controller
public class LoginController {
@GetMapping("/login")
public String showLoginForm() {
return "login";
}
@PostMapping("/login")
public String processLogin(@RequestParam String username, @RequestParam String password, HttpSession session) {
if (username.equals("admin") && password.equals("password")) {
session.setAttribute("username", username);
return "redirect:/home";
} else {
return "login";
}
}
}
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login", "/logout");
}
}
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
String uri = request.getRequestURI();
if (uri.endsWith("/login") || uri.endsWith("/logout") || session.getAttribute("username") != null) {
return true;
} else {
response.sendRedirect("/login");
return false;
}
}
}
```
在这个示例中,我们创建了一个名为LoginController的控制器,它包含了两个方法:showLoginForm()和processLogin()。showLoginForm()方法返回一个名为login的视图,该视图包含了一个简单的HTML表单,用于输入用户名和密码。processLogin()方法接收表单提交的用户名和密码,如果它们是“admin”和“password”,则将用户名存储在会话中,并将用户重定向到主页。否则,用户将保留在登录页面。
我们还创建了一个名为LoginInterceptor的拦截器,它实现了HandlerInterceptor接口。在preHandle()方法中,我们检查请求的URI是否以“/login”或“/logout”结尾,或者会话中是否存在用户名。如果是这样,我们返回true,否则我们将用户重定向到登录页面,并返回false。
最后,我们使用WebMvcConfigurer接口来配置拦截器。在addInterceptors()方法中,我们将LoginInterceptor添加到所有路径上,但排除“/login”和“/logout”路径。
希望这个示例能够帮助你实现一个简单的Spring Boot登录页面和登录拦截器。