下面我会详细讲解如何在Spring Boot中实现登陆过滤功能,并提供两条示例。
1. Spring Security实现登陆过滤
Spring Security是Spring官方推出的安全框架,能够实现用户认证(登陆)和授权(权限管理)功能。下面将通过一个示例来演示Spring Security实现登陆过滤的具体步骤。
- 添加Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 配置Spring Security
在Spring Boot的配置文件中添加如下内容:
spring:
security:
user:
name: admin
password: 123456
这里指定了一个用户名为admin,密码为123456的用户。
- 编写 Controller
在Controller中添加如下代码:
@RestController
public class TestController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
这里编写了一个简单的Controller,返回字符串"hello"。
- 启动应用程序
现在可以启动应用程序并访问localhost:8080/hello进行测试。
在未进行认证之前,访问该链接会提示需要认证(需要输入用户名和密码)。
- 登陆并访问
使用上一步中配置的用户名和密码进行登陆后,再次访问localhost:8080/hello即可成功访问。
2. 自定义过滤器实现登陆过滤
除了使用Spring Security外,我们也可以通过自定义过滤器来实现登陆过滤功能。下面将以一个示例来说明具体实现方法。
- 编写过滤器
可以通过实现javax.servlet.Filter接口或继承javax.servlet.FilterWrapper类来编写过滤器。这里我们选择继承FilterWrapper,代码如下:
public class LoginFilter extends FilterWrapper {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
// 判断是否已经登陆过
Object user = req.getSession().getAttribute("user");
if (user != null) {
chain.doFilter(request, response);
return;
}
// 未登陆则跳转到登陆页面
resp.sendRedirect("/login");
}
}
这里判断用户是否已经登陆过,如果已经登陆过则继续处理,否则跳转到登陆页面。
- 注册过滤器
在Spring Boot中可以通过在WebMvcConfigurer中注册过滤器来实现过滤器的注册。代码如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFilters(FilterRegistrationBean<?> registration) {
registration.setFilter(new LoginFilter());
registration.addUrlPatterns("/*");
}
}
这里将LoginFilter过滤器注册到所有的URL上。
- 编写Controller
编写一个简单的Controller,用于测试登陆过滤功能。代码如下:
@RestController
public class TestController {
@GetMapping("/")
public String home() {
return "home";
}
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(HttpServletRequest request, HttpServletResponse response) {
// 模拟登陆操作
request.getSession().setAttribute("user", "admin");
return "redirect:/";
}
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
// 清除session
request.getSession().invalidate();
return "redirect:/";
}
}
这里编写了一个HomeController,包含了登陆页面、登陆处理、注销等功能。
- 启动应用程序
启动应用程序并访问localhost:8080,会自动跳转到登陆页面。输入任意用户名和密码进行登陆后,即可访问其他页面。如果在没有登陆的情况下访问其他页面,则会被跳转到登陆页面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot登陆过滤功能的实现代码 - Python技术站